午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

小白學(xué) Python 爬蟲(chóng)(27):自動(dòng)化測(cè)試框架 Selenium 從入門(mén)到放棄(上)

 易禪浮屠 2022-03-04

人生苦短,我用 Python

前文傳送門(mén):

小白學(xué) Python 爬蟲(chóng)(1):開(kāi)篇

小白學(xué) Python 爬蟲(chóng)(2):前置準(zhǔn)備(一)基本類庫(kù)的安裝

小白學(xué) Python 爬蟲(chóng)(3):前置準(zhǔn)備(二)Linux基礎(chǔ)入門(mén)

小白學(xué) Python 爬蟲(chóng)(4):前置準(zhǔn)備(三)Docker基礎(chǔ)入門(mén)

小白學(xué) Python 爬蟲(chóng)(5):前置準(zhǔn)備(四)數(shù)據(jù)庫(kù)基礎(chǔ)

小白學(xué) Python 爬蟲(chóng)(6):前置準(zhǔn)備(五)爬蟲(chóng)框架的安裝

小白學(xué) Python 爬蟲(chóng)(7):HTTP 基礎(chǔ)

小白學(xué) Python 爬蟲(chóng)(8):網(wǎng)頁(yè)基礎(chǔ)

小白學(xué) Python 爬蟲(chóng)(9):爬蟲(chóng)基礎(chǔ)

小白學(xué) Python 爬蟲(chóng)(10):Session 和 Cookies

小白學(xué) Python 爬蟲(chóng)(11):urllib 基礎(chǔ)使用(一)

小白學(xué) Python 爬蟲(chóng)(12):urllib 基礎(chǔ)使用(二)

小白學(xué) Python 爬蟲(chóng)(13):urllib 基礎(chǔ)使用(三)

小白學(xué) Python 爬蟲(chóng)(14):urllib 基礎(chǔ)使用(四)

小白學(xué) Python 爬蟲(chóng)(15):urllib 基礎(chǔ)使用(五)

小白學(xué) Python 爬蟲(chóng)(16):urllib 實(shí)戰(zhàn)之爬取妹子圖

小白學(xué) Python 爬蟲(chóng)(17):Requests 基礎(chǔ)使用

小白學(xué) Python 爬蟲(chóng)(18):Requests 進(jìn)階操作

小白學(xué) Python 爬蟲(chóng)(19):Xpath 基操

小白學(xué) Python 爬蟲(chóng)(20):Xpath 進(jìn)階

小白學(xué) Python 爬蟲(chóng)(21):解析庫(kù) Beautiful Soup(上)

小白學(xué) Python 爬蟲(chóng)(22):解析庫(kù) Beautiful Soup(下)

小白學(xué) Python 爬蟲(chóng)(23):解析庫(kù) pyquery 入門(mén)

小白學(xué) Python 爬蟲(chóng)(24):2019 豆瓣電影排行

小白學(xué) Python 爬蟲(chóng)(25):爬取股票信息

小白學(xué) Python 爬蟲(chóng)(26):為啥買(mǎi)不起上海二手房你都買(mǎi)不起

引言

前面連續(xù)幾篇爬蟲(chóng)實(shí)戰(zhàn)不知道各位同學(xué)玩的怎么樣,小編是要繼續(xù)更新了,本篇我們來(lái)介紹一個(gè)前面已將安裝過(guò)的工具: Selenium ,如果說(shuō)是叫爬蟲(chóng)工具其實(shí)并不合適,在業(yè)界很多時(shí)候是拿來(lái)做自動(dòng)化測(cè)試的,所以本篇的標(biāo)題也就叫成了自動(dòng)化測(cè)試框架。

至于為什么叫這個(gè)名字我們就不去深究了,老外起名字的想象力還是相當(dāng)可以的。

它可以通過(guò)驅(qū)動(dòng)程序驅(qū)動(dòng)瀏覽器執(zhí)行特定的動(dòng)作,這個(gè)特性對(duì)我們爬取由 JavaScript 動(dòng)態(tài)渲染的頁(yè)面是非常友好的。

因?yàn)橛?JavaScript 動(dòng)態(tài)渲染的頁(yè)面,這種頁(yè)面上的 JavaScript 通常經(jīng)過(guò)了編譯打包,看到的都是簡(jiǎn)碼,非常難以閱讀。

其實(shí)他們編譯打包的目的就是不想讓別人看,但是由于瀏覽器的特性由所有人都看得到,這個(gè)就比較尷尬了。。。

比較常見(jiàn)的打包方式有 webpack 打包等等。

有感興趣的同學(xué)可以在留言區(qū)留言,人多的話小編后續(xù)可以分享一些前端的內(nèi)容。

前置準(zhǔn)備

在開(kāi)始之前,如果還沒(méi)安裝過(guò)環(huán)境的同學(xué)建議還是翻一翻前面你的文章,先把環(huán)境搞定。

請(qǐng)確認(rèn)自己已經(jīng)安裝了 Chrome 瀏覽器并且也已經(jīng)正確的配置了 ChromeDriver ,然后還需要正常的安裝了 Selenium 庫(kù)。

首先,還是官方網(wǎng)址敬上:

官方文檔:https://selenium.dev/selenium/docs/api/py/api.html

有任何問(wèn)題找官方,看不懂可以使用翻譯軟件。

基礎(chǔ)操作

以上前置準(zhǔn)備都 ok 了以后,我們開(kāi)始了解一下 Selenium 的一些基礎(chǔ)操作把。先寫(xiě)一點(diǎn)簡(jiǎn)單的小功能演示一下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()

browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
input.send_keys('極客挖掘機(jī)')
input.send_keys(Keys.ENTER)
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)

運(yùn)行以上代碼,可以看到自動(dòng)彈出來(lái)一個(gè) Chrome 瀏覽器,并且上面標(biāo)示了: Chrome 正受到自動(dòng)軟件的控制 。然后打開(kāi)了百度,在輸入框中輸入了 “極客挖掘機(jī)” 進(jìn)行搜索。

再搜索結(jié)果出來(lái)后控制臺(tái)打印了當(dāng)前的 URL 、 cookies 和網(wǎng)頁(yè)的源代碼。

控制臺(tái)的運(yùn)行結(jié)果就截個(gè)圖吧,內(nèi)容太長(zhǎng)就不貼了。

可以看到, Selenium 拿到的內(nèi)容,都是真實(shí)展示在瀏覽器中的內(nèi)容。由 JavaScript 動(dòng)態(tài)加載的頁(yè)面生成的 DOM 節(jié)點(diǎn)在 Selenium 下也無(wú)所遁形。

這個(gè)很好解釋,因?yàn)?Selenium 是直接拿到的瀏覽器展示的內(nèi)容。

聲明瀏覽器對(duì)象

Selenium 支持非常多的瀏覽器,如:

from selenium import webdriver

# 聲明瀏覽器對(duì)象,需對(duì)應(yīng)的驅(qū)動(dòng)程序方可使用
browser = webdriver.android()
browser = webdriver.blackberry()
browser = webdriver.chrome()
browser = webdriver.edge()
browser = webdriver.firefox()
browser = webdriver.ie()
browser = webdriver.opera()
browser = webdriver.phantomjs()
browser = webdriver.safari()

可以看到有我熟悉的 IE 瀏覽器、 Edge 瀏覽器、 FireFox 瀏覽器、 Opera 瀏覽器等等。

訪問(wèn)網(wǎng)頁(yè)

訪問(wèn)網(wǎng)頁(yè)可以使用 get() 方法,參數(shù)傳入我們想要訪問(wèn)的網(wǎng)站即可:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')
print(browser.page_source)

通過(guò)上面兩行代碼,我們可以看到自動(dòng)打開(kāi)了瀏覽器并訪問(wèn)的京東,在控制臺(tái)打印了京東的源代碼。

當(dāng)然,如果想要程序自動(dòng)關(guān)閉瀏覽器的話可以使用:

browser.close()

這句話加在上面可以看到瀏覽器打開(kāi)后訪問(wèn)京東一閃而過(guò)就關(guān)掉了。

查找單個(gè)節(jié)點(diǎn)

我們獲取到網(wǎng)頁(yè)后,第一步肯定是要先查找到 DOM 節(jié)點(diǎn)啊,然后可以直接從 DOM 節(jié)點(diǎn)中獲取數(shù)據(jù)。

不過(guò)有了 Selenium 以后,我們不僅可以查找到節(jié)點(diǎn)獲取數(shù)據(jù),還可以模擬用戶操作,比如在搜索框輸入某些內(nèi)容,點(diǎn)擊按鈕等等操作,不過(guò)還是先看看怎么查找節(jié)點(diǎn):

從上面這張圖可以看到,我們想要獲取輸入框,可以通過(guò) id 進(jìn)行獲取,那么我們接下來(lái)的代碼要這么寫(xiě):

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')
input_key = browser.find_element_by_id('key')
print(input_key)

結(jié)果如下:

<selenium.webdriver.remote.webelement.WebElement (session="86d1ae1419bee22099a168dfbf921a27", element="53047804-ad39-4dfd-b3fb-a149fb1c8ac8")>

可以看到,我們獲得的元素類型是 WebElement 。

小編這里順手列出所有的獲得單個(gè)節(jié)點(diǎn)的方法:

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

此外, selenium 還未我們提供了一個(gè)通用方法 find_element() ,它需要傳入兩個(gè)參數(shù):查找方式 By 和值。實(shí)際上上面示例中的查找方式還可以這么寫(xiě)(效果完全一樣哦~~~):

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')
input_key1 = browser.find_element(By.ID, 'key')
print(input_key1)

結(jié)果小編就不貼了,各位同學(xué)可以自己運(yùn)行下進(jìn)行對(duì)比。

查找多個(gè)節(jié)點(diǎn)

比如我們要查找左邊的這種導(dǎo)航條的所有條目:

可以這么寫(xiě):

lis = browser.find_elements_by_css_selector('.cate_menu li')
print(lis)

結(jié)果如下:

[<selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="8e0d1a8c-d5dc-4b1f-8250-7f0eca864ea7")>, <selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="15cd4dc9-42f4-4ed7-9258-9aa29073243c")>, 
......]

太多了,小編后面的結(jié)果就省略掉了。

下面列出來(lái)所有的多節(jié)點(diǎn)選擇的方法:

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

同樣,多節(jié)點(diǎn)選擇也有一個(gè) find_elements() 的方法,小編這里就不展示,各位同學(xué)自己試一試。

本篇先到這里,下一篇我們接著介紹交互操作。

示例代碼

本系列的所有代碼小編都會(huì)放在代碼管理倉(cāng)庫(kù) Github 和 Gitee 上,方便大家取用。

示例代碼-Github

示例代碼-Gitee

參考

https://selenium-python./api.html

https:///5630.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多