国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

??爬蟲(chóng)+自動(dòng)化利器 selenium 之自學(xué)成才篇(一)??

james / 3420人閱讀

selenium 簡(jiǎn)介

Selenium 是最廣泛使用的開(kāi)源 Web UI(用戶界面)自動(dòng)化測(cè)試套件之一。Selenium 支持的語(yǔ)言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驅(qū)動(dòng)程序最受 Python 和 C#歡迎。 Selenium 測(cè)試腳本可以使用任何支持的編程語(yǔ)言進(jìn)行編碼,并且可以直接在大多數(shù)現(xiàn)代 Web 瀏覽器中運(yùn)行。在爬蟲(chóng)領(lǐng)域 selenium 同樣是一把利器,能夠解決大部分的網(wǎng)頁(yè)的反爬問(wèn)題,但也不是萬(wàn)能的,它最明顯的缺點(diǎn)就是速度慢。下面就進(jìn)入正式的 study 階段。


selenium安裝

打開(kāi) cmd,輸入下面命令進(jìn)行安裝。

pip install -i https://pypi.douban.com/simple selenium

執(zhí)行后,使用 pip show selenium 查看是否安裝成功。


安裝瀏覽器驅(qū)動(dòng)

針對(duì)不同的瀏覽器,需要安裝不同的驅(qū)動(dòng)。下面列舉了常見(jiàn)的瀏覽器與對(duì)應(yīng)的驅(qū)動(dòng)程序下載鏈接,部分網(wǎng)址需要 “科學(xué)上網(wǎng)” 才能打開(kāi)哦(ffffdd)。

  • Firefox 瀏覽器驅(qū)動(dòng):Firefox
  • Chrome 瀏覽器驅(qū)動(dòng):Chrome
  • IE 瀏覽器驅(qū)動(dòng):IE
  • Edge 瀏覽器驅(qū)動(dòng):Edge
  • PhantomJS 瀏覽器驅(qū)動(dòng):PhantomJS
  • Opera 瀏覽器驅(qū)動(dòng):Opera

這里以安裝 Chrome 驅(qū)動(dòng)作為演示,同時(shí)也推薦大家使用 Chrome,別的瀏覽器有些方面有些不足。

確定瀏覽器版本

在新標(biāo)簽頁(yè)輸入 chrome://settings/ 進(jìn)入設(shè)置界面,然后選擇 【關(guān)于 Chrome

查看自己的版本信息。這里我的版本是94,這樣在下載對(duì)應(yīng)版本的 Chrome 驅(qū)動(dòng)即可。

下載驅(qū)動(dòng)

打開(kāi) Chrome驅(qū)動(dòng) 。單擊對(duì)應(yīng)的版本。

根據(jù)自己的操作系統(tǒng),選擇下載。


下載完成后,壓縮包內(nèi)只有一個(gè)exe文件。

chromedriver.exe 保存到任意位置,并把當(dāng)前路徑保存到環(huán)境變量中(我的電腦>>右鍵屬性>>高級(jí)系統(tǒng)設(shè)置>>高級(jí)>>環(huán)境變量>>系統(tǒng)變量>>Path),添加的時(shí)候要注意不要把path變量給覆蓋了,如果覆蓋了千萬(wàn)別關(guān)機(jī),然后百度。添加成功后使用下面代碼進(jìn)行測(cè)試。

from selenium import webdriver# Chrome瀏覽器driver = webdriver.Chrome()

定位頁(yè)面元素

打開(kāi)指定頁(yè)面

使用 selenium 定位頁(yè)面元素的前提是你已經(jīng)了解基本的頁(yè)面布局及各種標(biāo)簽含義,當(dāng)然如果之前沒(méi)有接觸過(guò),現(xiàn)在我也可以帶你簡(jiǎn)單的了解一下。
以我們熟知的 CSDN 為例,我們進(jìn)入首頁(yè),按 F12 進(jìn)入開(kāi)發(fā)者工具。紅框中顯示的就是頁(yè)面的代碼,我們要做的就是從代碼中定位獲取我們需要的元素。

想要定位并獲取頁(yè)面中的信息,首先要使用 webdriver 打開(kāi)指定頁(yè)面,再去定位。

from selenium import webdriver# Chrome瀏覽器driver = webdriver.Chrome()driver.get("https://www.csdn.net/")

執(zhí)行上面語(yǔ)句后會(huì)發(fā)現(xiàn),瀏覽器打開(kāi) CSDN 主頁(yè)后會(huì)馬上關(guān)閉,想要防止瀏覽器自動(dòng)關(guān)閉,可以添加下面代碼。

# 不自動(dòng)關(guān)閉瀏覽器option = webdriver.ChromeOptions()option.add_experimental_option("detach", True)

這樣將上面的代碼組合再打開(kāi)瀏覽器就不會(huì)自動(dòng)關(guān)閉了。

下面我們?cè)賮?lái)看看幾種常見(jiàn)的頁(yè)面元素定位方式。

id 定位

標(biāo)簽的 id 具有唯一性,就像人的身份證,假設(shè)有個(gè) input 標(biāo)簽如下。

<input id="toolbar-search-input" autocomplete="off" type="text" value="" placeholder="C++難在哪里?">

我們可以通過(guò) id 定位到它,由于 id 的唯一性,我們可以不用管其他的標(biāo)簽的內(nèi)容。

driver.find_element_by_id("toolbar-search-input")

name 定位

name 指定標(biāo)簽的名稱,在頁(yè)面中可以不唯一。假設(shè)有個(gè) meta 標(biāo)簽如下

<meta name="keywords" content="CSDN博客,CSDN學(xué)院,CSDN論壇,CSDN直播">

我們可以使用 find_element_by_name 定位到 meta 標(biāo)簽。

driver.find_element_by_name("keywords")

class 定位

class 指定標(biāo)簽的類名,在頁(yè)面中可以不唯一。假設(shè)有個(gè) div 標(biāo)簽如下

<div class="toolbar-search-container">

我們可以使用 find_element_by_class_name 定位到 div 標(biāo)簽。

driver.find_element_by_class_name("toolbar-search-container")

tag 定位

每個(gè) tag 往往用來(lái)定義一類功能,所以通過(guò) tag 來(lái)識(shí)別某個(gè)元素的成功率很低,每個(gè)頁(yè)面一般都用很多相同的 tag ,比如:/

/ 等。這里還是用上面的 div 作為例子。

<div class="toolbar-search-container">

我們可以使用 find_element_by_class_name 定位到 div 標(biāo)簽。

driver.find_element_by_tag_name("div")

xpath 定位

xpath 是一種在 XML 文檔中定位元素的語(yǔ)言,它擁有多種定位方式,下面通過(guò)實(shí)例我們看一下它的幾種使用方式。

<html>  <head>...<head/>  <body>    <div id="csdn-toolbar">      <div class="toolbar-inside">        <div class="toolbar-container">          <div class="toolbar-container-left">...div>          <div class="toolbar-container-middle">            <div class="toolbar-search onlySearch">			<div class="toolbar-search-container">				<input id="toolbar-search-input" autocomplete="off" type="text" value="" placeholder="C++難在哪里?">

根據(jù)上面的標(biāo)簽需要定位 最后一行 input 標(biāo)簽,以下列出了四種方式,xpath 定位的方式多樣并不唯一,使用時(shí)根據(jù)情況進(jìn)行解析即可。

# 絕對(duì)路徑(層級(jí)關(guān)系)定位driver.find_element_by_xpath(	"/html/body/div/div/div/div[2]/div/div/input[1]")# 利用元素屬性定位driver.find_element_by_xpath(	"http://*[@id="toolbar-search-input"]"))# 層級(jí)+元素屬性定位driver.find_element_by_xpath(	"http://div[@id="csdn-toolbar"]/div/div/div[2]/div/div/input[1]")# 邏輯運(yùn)算符定位driver.find_element_by_xpath(	"http://*[@id="toolbar-search-input" and @autocomplete="off"]")

css 定位

CSS 使用選擇器來(lái)為頁(yè)面元素綁定屬性,它可以較為靈活的選擇控件的任意屬性,一般定位速度比 xpath 要快,但使用起來(lái)略有難度。
CSS 選擇器常見(jiàn)語(yǔ)法:

方法例子描述
.class.toolbar-search-container選擇 class = "toolbar-search-container" 的所有元素
#id#toolbar-search-input選擇 id = "toolbar-search-input" 的元素
**選擇所有元素
elementinput選擇所有 元素
element>elementdiv>input選擇父元素為
的所有 元素
element+elementdiv+input選擇同一級(jí)中在
之后的所有 元素
[attribute=value]type="text"選擇 type = "text" 的所有元素

舉個(gè)簡(jiǎn)單的例子,同樣定位上面實(shí)例中的 input 標(biāo)簽。

driver.find_element_by_css_selector("#toolbar-search-input")driver.find_element_by_css_selector("html>body>div>div>div>div>div>div>input")

link 定位

link 專門(mén)用來(lái)定位文本鏈接,假如要定位下面這一標(biāo)簽。

<div class="practice-box" data-v-04f46969="">加入!每日一練div>

我們使用 find_element_by_link_text 并指明標(biāo)簽內(nèi)全部文本即可定位。

driver.find_element_by_link_text("加入!每日一練")

partial_link 定位

partial_link 翻譯過(guò)來(lái)就是“部分鏈接”,對(duì)于有些文本很長(zhǎng),這時(shí)候就可以只指定部分文本即可定位,同樣使用剛才的例子。

<div class="practice-box" data-v-04f46969="">加入!每日一練div>

我們使用 find_element_by_partial_link_text 并指明標(biāo)簽內(nèi)部分文本進(jìn)行定位。

driver.find_element_by_partial_link_text("加入")

瀏覽器控制

修改瀏覽器窗口大小

from selenium import webdriver# Chrome瀏覽器driver = webdriver.Chrome()driver.get("https://www.csdn.net/")# 設(shè)置瀏覽器瀏覽器的寬高為:600x800driver.set_window_size(600, 800)

使用 maximize_window() 方法可以實(shí)現(xiàn)瀏覽器全屏顯示。

from selenium import webdriver# Chrome瀏覽器driver = webdriver.Chrome()driver.get("https://www.csdn.net/")# 設(shè)置瀏覽器瀏覽器的寬高為:600x800driver.maximize_window()

瀏覽器前進(jìn)&后退

webdriver 提供 backforward 方法來(lái)實(shí)現(xiàn)頁(yè)面的后退與前進(jìn)。下面我們 ①進(jìn)入CSDN首頁(yè),②打開(kāi)CSDN個(gè)人主頁(yè),③back 返回到CSDN首頁(yè),④ forward 前進(jìn)到個(gè)人主頁(yè)。

from selenium import webdriverfrom time import sleepdriver = webdriver.Chrome()# 訪問(wèn)CSDN首頁(yè)driver.get("https://www.csdn.net/")sleep(2)#訪問(wèn)CSDN個(gè)人主頁(yè)driver.get("https://blog.csdn.net/qq_43965708")sleep(2)#返回(后退)到CSDN首頁(yè)driver.back()sleep(2)#前進(jìn)到個(gè)人主頁(yè)driver.forward()

細(xì)心的讀者會(huì)發(fā)現(xiàn)第二次 get() 打開(kāi)新頁(yè)面時(shí),會(huì)在原來(lái)的頁(yè)面打開(kāi),而不是在新標(biāo)簽中打開(kāi)。如果想的話也可以在新的標(biāo)簽頁(yè)中打開(kāi)新的鏈接,但需要更改一下代碼,執(zhí)行 js 語(yǔ)句來(lái)打開(kāi)新的標(biāo)簽。

# 在原頁(yè)面打開(kāi)driver.get("https://blog.csdn.net/qq_43965708")# 新標(biāo)簽中打開(kāi)js = "window.open("https://blog.csdn.net/qq_43965708")"driver.execute_script(js)

瀏覽器刷新

在一些特殊情況下我們可能需要刷新頁(yè)面來(lái)獲取最新的頁(yè)面數(shù)據(jù),這時(shí)我們可以使用 refresh() 來(lái)刷新當(dāng)前頁(yè)面。

# 刷新頁(yè)面driver.refresh()

瀏覽器窗口切換

在很多時(shí)候我們都需要用到窗口切換,比如:當(dāng)我們點(diǎn)擊注冊(cè)按鈕時(shí),它一般會(huì)打開(kāi)一個(gè)新的標(biāo)簽頁(yè),但實(shí)際上代碼并沒(méi)有切換到最新頁(yè)面中,這時(shí)你如果要定位注冊(cè)頁(yè)面的標(biāo)簽就會(huì)發(fā)現(xiàn)定位不到,這時(shí)就需要將實(shí)際窗口切換到最新打開(kāi)的那個(gè)窗口。我們先獲取當(dāng)前各個(gè)窗口的句柄,這些信息的保存順序是按照時(shí)間來(lái)的,最新打開(kāi)的窗口放在數(shù)組的末尾,這時(shí)我們就可以定位到最新打開(kāi)的那個(gè)窗口了。

# 獲取打開(kāi)的多個(gè)窗口句柄windows = driver.window_handles# 切換到當(dāng)前最新打開(kāi)的窗口driver.switch_to.window(windows[-1])

常見(jiàn)操作

webdriver中的常見(jiàn)操作有:

方法描述
send_keys()模擬輸入指定內(nèi)容
clear()清除文本內(nèi)容
is_displayed()判斷該元素是否可見(jiàn)
get_attribute()獲取標(biāo)簽屬性值
size返回元素的尺寸
text返回元素文本

接下來(lái)還是用 CSDN 首頁(yè)為例,需要用到的就是搜素框和搜索按鈕。通過(guò)下面的例子就可以氣息的了解各個(gè)操作的用法了。

from selenium import webdriverdriver = webdriver.Chrome()driver.get("https://www.csdn.net/")sleep(2)# 定位搜索輸入框text_label = driver.find_element_by_xpath("http://*[@id="toolbar-search-input"]")# 在搜索框中輸入 Dream丶Killertext_label.send_keys("Dream丶Killer")sleep(2)# 清除搜索框中的內(nèi)容text_label.clear()# 輸出搜索框元素是否可見(jiàn)print(text_label.is_displayed())# 輸出placeholder的值print(text_label.get_attribute("placeholder"))# 定位搜索按鈕button = driver.find_element_by_xpath("http://*[@id="toolbar-search-button"]/span")# 輸出按鈕的大小print(button.size)# 輸出按鈕上的文本print(button.text)"""輸出內(nèi)容Truepython面試100問(wèn){"height": 32, "width": 28}搜索"""


鼠標(biāo)控制

在webdriver 中,鼠標(biāo)操作都封裝在ActionChains類中,常見(jiàn)方法如下:

方法描述
click()單擊左鍵
context_click()單擊右鍵
double_click()雙擊
drag_and_drop()拖動(dòng)
move_to_element()鼠標(biāo)懸停
perform()執(zhí)行所有ActionChains中存儲(chǔ)的動(dòng)作

單擊左鍵

模擬完成單擊鼠標(biāo)左鍵的操作,一般點(diǎn)擊進(jìn)入子頁(yè)面等會(huì)用到,左鍵不需要用到ActionChains。

# 定位搜索按鈕button = driver.find_element_by_xpath("http://*[@id="toolbar-search-button"]/span")# 執(zhí)行單擊操作button.click()

單擊右鍵

鼠標(biāo)右擊的操作與左擊有很大不同,需要使用ActionChains。

from selenium.webdriver.common.action_chains import ActionChains# 定位搜索按鈕button = driver.find_element_by_xpath("http://*[@id="toolbar-search-button"]/span")# 右鍵搜索按鈕ActionChains(driver).context_click(button).perform()

雙擊

模擬鼠標(biāo)雙擊操作

# 定位搜索按鈕button = driver.find_element_by_xpath("http://*[@id="toolbar-search-button"]/span")# 執(zhí)行雙擊動(dòng)作ActionChains(driver).double_click(button).perform()

拖動(dòng)

模擬鼠標(biāo)拖動(dòng)操作,該操作有兩個(gè)必要參數(shù),

  • source:鼠標(biāo)拖動(dòng)的元素
  • target:鼠標(biāo)拖至并釋放的目標(biāo)元素
# 定位要拖動(dòng)的元素source = driver.find_element_by_xpath("xxx")# 定位目標(biāo)元素target = driver.find_element_by_xpath("xxx")# 執(zhí)行拖動(dòng)動(dòng)作ActionChains(driver).drag_and_drop(source, target).perform()

鼠標(biāo)懸停

模擬懸停的作用一般是為了顯示隱藏的下拉框,比如 CSDN 主頁(yè)的收藏欄,我們看一下效果。

# 定位收藏欄collect  = driver.find_element_by_xpath("http://*[@id="csdn-toolbar"]/div/div/div[3]/div/div[3]/a")# 懸停至收藏標(biāo)簽處ActionChains(driver).move_to_element(collect).perform()

鍵盤(pán)控制

webdriver中Keys類幾乎提供了鍵盤(pán)上的所有按鍵方法,我們可以使用send_keys + Keys實(shí)現(xiàn)輸出鍵盤(pán)上的組合按鍵如“Ctrl + C”、“Ctrl + V”等。

# 定位輸入框并輸入文本driver.find_element_by_id("xxx").send_keys("Dream丶killer")# 模擬回車鍵進(jìn)行跳轉(zhuǎn)(輸入內(nèi)容后) driver.find_element_by_id("xxx").send_keys(Keys.ENTER)# 使用 Backspace 來(lái)刪除一個(gè)字符driver.find_element_by_id("xxx").send_keys(Keys.BACK_SPACE)# Ctrl + A 全選輸入框中內(nèi)容driver.find_element_by_id("xxx").send_keys(Keys.CONTROL, "a")# Ctrl + C 復(fù)制輸入框中內(nèi)容driver.find_element_by_id("xxx").send_keys(Keys.CONTROL, "c")# Ctrl + V 粘貼輸入框中內(nèi)容driver.find_element_by_id("xxx").send_keys(Keys.CONTROL, "v")

其他常見(jiàn)鍵盤(pán)操作:

操作描述
Keys.F1F1鍵
Keys.SPACE空格
Keys.TABTab鍵
Keys.ESCAPEESC鍵
Keys.ALTAlt鍵
Keys.SHIFTShift鍵
Keys.ARROW_DOWN向下箭頭
Keys.ARROW_LEFT向左箭頭
Keys.ARROW_RIGHT向右箭頭
Keys.ARROW_UP向上箭頭

未完待續(xù)~


??往期精彩,不容錯(cuò)過(guò)??

總結(jié)篇
??兩萬(wàn)字,50個(gè)pandas高頻操作【圖文并茂,值得收藏】??
??吐血總結(jié)《Mysql從入門(mén)到入魔》,圖文并茂(建議收藏)??


工具篇
??Python實(shí)用小工具之制作酷炫二維碼(有界面、附源碼)??
??Python實(shí)用工具之制作證件照(有界面、附源碼)??
??女朋友桌面文件雜亂無(wú)章?氣得我用Python給她做了一個(gè)文件整理工具??

更多有趣的文章及干貨,盡在

? ? ?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/121155.html

相關(guān)文章

  • 爬蟲(chóng) + 動(dòng)化利器 selenium 自學(xué)成才(二)

    摘要:耗時(shí)代碼運(yùn)行到這句之后觸發(fā)隱式等待,在輪詢檢查后仍然沒(méi)有定位到元素,拋出異常。耗時(shí)值得一提的是,對(duì)于定位不到元素的時(shí)候,從耗時(shí)方面隱式等待和強(qiáng)制等待沒(méi)什么區(qū)別。 ...

    AWang 評(píng)論0 收藏0
  • ??字節(jié)跳動(dòng)學(xué)姐熬了個(gè)月才完成這份內(nèi)部軟件測(cè)試開(kāi)發(fā)手冊(cè),在GitHub標(biāo)星27k,開(kāi)源下載

    本文是為了幫大家快速回顧了測(cè)試中知識(shí)點(diǎn),這套面試手冊(cè)整整花了一個(gè)月的時(shí)間整理出來(lái),上傳到Git上目前star數(shù)達(dá)到了27K+。內(nèi)容涵蓋了諸多技術(shù)棧的面試題和答案,相信可以幫助大家在最短的時(shí)間內(nèi)用作面試復(fù)習(xí),能達(dá)到事半功倍效果。 同時(shí)用XMind畫(huà)了一張導(dǎo)圖記錄軟件測(cè)試的學(xué)習(xí)筆記,有需要的朋友,幫作者關(guān)注點(diǎn)贊收藏三連一下,即可無(wú)償下載一份! 測(cè)試開(kāi)發(fā)手冊(cè)完整版PDF??? 軟件測(cè)試核心知識(shí)點(diǎn)目錄內(nèi)容...

    tinna 評(píng)論0 收藏0
  • ??軟件測(cè)試經(jīng)典10題(含解析) 軟件測(cè)試行業(yè),去大公司還是小公司好???

    年輕人都會(huì)犯的3個(gè)職場(chǎng)錯(cuò)誤,你有幾個(gè)? 測(cè)試人員如何才能快速成長(zhǎng)? 軟件測(cè)試行業(yè),去大公司還是小公司好? 同學(xué)們可以用這 10 道題目,找到自己的薄弱點(diǎn),對(duì)癥下藥哦。 我的建議是:你們可以拿出紙筆,寫(xiě)下這 10 道題的答案,然后再與文末的答案進(jìn)行對(duì)照~ 選擇題 1. (單選)當(dāng)需要對(duì)某個(gè)系統(tǒng)進(jìn)行測(cè)試的時(shí)候,應(yīng)該從哪些方面來(lái)設(shè)計(jì)測(cè)試用例? A. 功能驗(yàn)證 B. 性能相關(guān)的驗(yàn)證 C. 兼容性相關(guān)的驗(yàn)...

    zhunjiee 評(píng)論0 收藏0
  • 趁著課余時(shí)間學(xué)點(diǎn)Python(十四)文件操作

    摘要:我是布小禪,一枚自學(xué)萌新,跟著我每天進(jìn)步一點(diǎn)點(diǎn)吧說(shuō)了這么多暫時(shí)也就夠了,那么就告辭吧 文章目錄 ?? 前言 ??? 作者簡(jiǎn)介 ??文件操作?1??、open函數(shù)...

    abson 評(píng)論0 收藏0
  • 【Python爬蟲(chóng)】4萬(wàn)字,詳解selenium從入門(mén)到實(shí)戰(zhàn)【錯(cuò)過(guò)再無(wú)】

    摘要:難在哪里根據(jù)上面的標(biāo)簽需要定位最后一行標(biāo)簽,以下列出了四種方式,定位的方式多樣并不唯一,使用時(shí)根據(jù)情況進(jìn)行解析即可。加入每日一練我們使用并指明標(biāo)簽內(nèi)全部文本即可定位。 ...

    shiyang6017 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<