主頁 > 軟體設計 > 一起學爬蟲(Python) — 22 自動化詳解

一起學爬蟲(Python) — 22 自動化詳解

2020-12-30 11:55:06 軟體設計

一起學爬蟲(Python) — 19 年輕人,進來學自動化

自從這個一起學自動化發布之后,也是有很多小粉絲就偷偷跟我說看不懂,不明白,求求你教教我之類的(自我想象),所以今天就來詳細的教大家什么是selenium!

在這里插入圖片描述

深入Selenium

  • 前言
  • 回顧
    • 真·回顧
  • 干飯去了

前言

在這里插入圖片描述
又是一大早就來給大家伙更新啦,昨天好像是發燒了…有些小粉絲問的問題沒有及時回答到,偷懶了一天,

不過昨天有看到某個大佬寫的2020年總結,其中看到他一開始是每天更新三篇,然后每天訪問量5000左右,

那么我也要每天…

怎么可能,

每天三篇也太多了吧,所以說大佬就是大佬,雖然很感動,但是醒來之后還是要悄悄地干飯,然后餓死所有人!

在這里插入圖片描述
盡量,盡量好吧,能多更就多更,畢竟全靠用愛發電,愛可是會消失的,

各位且看且珍惜哈,如果可以的話,動動你的小手,點個三連,給小澤充充電吧!

回顧

這里為什么是回顧呢,因為我想啊,上一次實在是有點霸道了些,二話不說就把各位壁咚了,根本就沒講明白每一句每一個詞她的用法嘛,這也很不符合小澤親民的形象,所以呢,為了形象,對,沒錯,為了形象,你別自戀啦,就帶著大家先一起回顧一下上一次的全部代碼!

當然也闊能是為了各位,

具體要看點贊的力度啦,點贊不積極,腦殼有問題!

在這里插入圖片描述
好的,多說不廢話,讓我們直接開沖!

真·回顧

首先,讓我們來一條一條看那天的代碼!

from time import sleep
from selenium import webdriver

這兩句不用多說了叭,好好記住!

# 這里指定自己的谷歌引擎目錄
driver = webdriver.Chrome(executable_path='./chromedriver.exe')

這里呢,就相當于是初始化了一個物件,這個driver是我們自己起的名字,換成其他的也是可以的,然后 ‘./chromedriver.exe’ 是我們的chromedriver.exe的路徑,如果你沒有的話,肯定是會報錯的,或者說版本跟你的瀏覽器不符合也是會報錯的,具體怎么下載在19天里面有講哦~

神奇の傳送門

# 打開csdn的登錄界面
driver.get('https://passport.csdn.net/login?code=public')
print('正在打開指定網頁…')
sleep(1)

這個get()方法呢,里面放我們的url,driver是我們自己定義的,不要迷糊了!

這里為什么要用sleep呢,這里面還是有大學問的,搬好板凳好好聽:

舉個栗子,我們需要定位到美女圖片網站的美女圖片的標簽上面,如果不設定sleep1秒的話,可能就會還沒加載出來程式已經往下走了,然后就會給我們無情的報錯,告訴我們沒有找到該標簽,這是因為我們的美女圖片還沒有加載出來她就往下走了嘛,所以如果設定個sleep1秒的話,就有了1秒時間給她加載,如果你的電腦1秒也不夠的話,就多設定設定,有的時候報錯可能是等待的時間不夠長!

既然說到等待了,這里就給大家科普一下等待的三種方法:

第一種,也就是我們的sleep!

好處呢,就是簡單唄,直接sleep,壞處就是沒依據唄,要等待多久,全靠我們自己的感覺,

第二種,就是implicitly_wait()!

括號里面填的是秒數哦~這是一種隱式等待,比如說我們在括號里面填個60,那就是一分鐘內如果整個頁面加載完了,就繼續往下走,不然就一直等,只等一分鐘,聽懂了嘛,就是會一直等到整個頁面加載完成,才會往下走,比如說你只要第一個美女圖片,她非要給你把全部的美女圖片都加載出來才給你走,

寫法的話…

# 隱式等待,driver是我們自己初始化的,再次強調!
driver.implicitly_wait(60)

不過她的好處就是只需要設定一次,不需要我們瘋狂sleep,只需要在開頭那里設定好最長等待時間,往后的每個頁面都是加載完再往下走,如果規定時間內沒ok,就給你報錯,那就說明網路或者服務器有問題啦~

壞處呢,就是非要全部加載完再走啦,因為可能有的網頁10%的內容是你需要的,很快就加載出來了,然后又花了90%的時間給你加載一堆廣告,沒錯,說的就是你們深夜經常看的那種網站,澳門賭場歡迎您!

在這里插入圖片描述
分享給我一部唄~

第三種等待方式呢,就比較高級啦,也比較好用,俗話說得好,好的總在后面,所以各位哪怕被甩了也不要太難過了,畢竟年少不知軟飯香,老來病弱無人依,好濕好濕,

既然有了隱式等待,同樣的也有顯式等待,接下來要介紹的就是顯式等待!

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 這里指定自己的谷歌引擎目錄
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
# 打開csdn的登錄界面
driver.get('https://passport.csdn.net/login?code=public')
print('正在打開指定網頁…')
# 主要看下面這塊哦
try:
    # driver是我們自己設定的,20是最多等多久,0.5是檢查間隔,每隔0.5秒檢查一次指定標簽有沒有出來
    WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located((By.XPATH,'//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]')))
    print('指定查帕斯已經加載出來了!')
except:
    print('超時!')

# 找到那個輸入賬號密碼的按鈕
dl = driver.find_element_by_xpath('//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]')
# 點擊
dl.click()

可以看到,第三種方法呢,是非常的復雜啊,對于小白來說是非常的不友好,但是她好用啊,富婆難追,但是她好用啊!

在這里插入圖片描述
追到就是賺到,還不趕快加入追富婆潮流~

咳咳,可以看到上面呢,是根據我們的xpath去判斷標簽是否加載出來的,如果加載出來了就繼續下一步,如果在指定時間里沒加載出來就執行except:里面的代碼,就相當于只要你要的美女圖片一加載出來就立馬拿到然后跑路,

當然了,肯定會有人這樣問,好好的等人家加載完不行嗎,又不缺那點時間,

或者,為什么要這么極端鴨,萬一加載出來是個半成品呢!

當然如果你嫌麻煩,可以用sleep,甚至可以什么都不用,直接裸奔起飛,蕪湖,

還有鴨,現在的網站并不是說要全部加載出來才能進行操作的嘛,畢竟都支持協程或者多執行緒了,就好比說讓一個人穿褲子,難道他就不能內褲和褲子套在一起一起穿嗎,或者說他就不能一邊穿褲子一邊跳舞嗎,都是可以的嘛,所以只要我們要的東西加載出來,就可以立馬去呼叫,去執行,

至于 EC 和 By 呢,是我們呼叫的模塊,自己給他改成了這種縮寫,所以也不要迷茫,問這到底是個啥,

presence_of_element_located這個呢,百度翻譯過來就是:

在這里插入圖片描述
可以理解為去定位元素啦~

當然后面的括號里是要加元組的,元組元組元組!

不加不會報錯,會執行expect里面的東西,曉得了不,

元組里面呢,第一個就是我們要找的型別,不光有XPATH,還有ID,甚至TAG_NAME,標簽名字,很多很多,大家可以自己去探索一下,人人都是探索家!

后面呢,就是相對應的定位啦,

這種方法呢,解決了前面兩種等待的缺點,化他們的缺點為優點,當然她也是有缺點的,那就是比較難吧,還有就是需要多次呼叫,只要你需要判斷就要呼叫,不過復制粘貼也挺好用的,

當然也有人可能會好奇自動化的話,這個頁面要怎么切換哦,這里呢,也給大家講一哈,

先情景模擬一下,比如說我們深夜的時候看小電影,哎呀一個不小心點到了廣告,相信大家都會有這樣的經歷吧,然后就會蹦出來一個一起來玩球鴨的新頁面,別問我為什么這么懂,我其實不懂,因為你們懂,所以我不懂,懂的掌聲 ,

那這個時候我們自動化的話,默認是在第一個頁面進行操作吧,那當然就會報錯了吧,因為我們所有的操作都是基于第一個頁面的,這個時候就需要進行手動的一個頁面切換!

# 切換到最后一個頁面
driver.switch_to_window(window[-1])

在這里插入圖片描述
就是這種頁面哦,第一個索引就是0,第二個就是1,第三個就是2,反過來最后一個就是-1!

那么,如何打開一個新視窗呢!

# 拿小本本記好這個方法,只需要改動一下url就可以了
driver.execute_script("window.open('https://www.baidu.com')")

細節拉滿!

# 找到那個輸入賬號密碼的按鈕
dl = driver.find_element_by_xpath('//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]')
# 點擊
dl.click()
sleep(1)

這里如果你看不懂注釋的話,就去19天那里看一下就知道了,小澤是基于那一天的全部代碼來給大家進行一個科普的,

find_element_by_xpath,同樣的,還有:

在這里插入圖片描述

很多種選擇,任君挑選,

find就是尋找嘛,element就是要素嘛,by就是通過嘛,xpath就是查帕斯嘛,你不光可以通過xpath尋找,還可以通過很多很多,如果看到element后面帶s的,那就是找所有的只要符合條件的,

click就是點擊,沒毛病吧,這里還是可以接受的吧,

當然點擊也是有很多種方式的,不過這里就不多說了,click就夠用了,如果以后再遇到點不了的,再對癥下藥!

干飯去了

言簡意賅,剩下的下午或者晚上或者明天或者后天或者大后天或者大大后天再更新吧,要去干飯了,

大家伙記得點個贊,求求了!
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/242416.html

標籤:其他

上一篇:專案版本管理的最佳實踐:飛流Flow(阿里AoneFlow)篇

下一篇:SAP-PS專案庫存跨公司業務STO解決方案--SAP閑人的開篇

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more