前文傳送門(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)單的小功能演示一下:
運(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 支持非常多的瀏覽器,如:
可以看到有我熟悉的 IE 瀏覽器、 Edge 瀏覽器、 FireFox 瀏覽器、 Opera 瀏覽器等等。 訪問(wèn)網(wǎng)頁(yè)訪問(wèn)網(wǎng)頁(yè)可以使用
通過(guò)上面兩行代碼,我們可以看到自動(dòng)打開(kāi)了瀏覽器并訪問(wèn)的京東,在控制臺(tái)打印了京東的源代碼。 當(dāng)然,如果想要程序自動(dòng)關(guān)閉瀏覽器的話可以使用:
這句話加在上面可以看到瀏覽器打開(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ě):
結(jié)果如下:
可以看到,我們獲得的元素類型是 WebElement 。 小編這里順手列出所有的獲得單個(gè)節(jié)點(diǎn)的方法:
此外, selenium 還未我們提供了一個(gè)通用方法
結(jié)果小編就不貼了,各位同學(xué)可以自己運(yùn)行下進(jìn)行對(duì)比。 查找多個(gè)節(jié)點(diǎn)比如我們要查找左邊的這種導(dǎo)航條的所有條目: 可以這么寫(xiě):
結(jié)果如下:
太多了,小編后面的結(jié)果就省略掉了。 下面列出來(lái)所有的多節(jié)點(diǎn)選擇的方法:
同樣,多節(jié)點(diǎn)選擇也有一個(gè) find_elements() 的方法,小編這里就不展示,各位同學(xué)自己試一試。 本篇先到這里,下一篇我們接著介紹交互操作。 示例代碼本系列的所有代碼小編都會(huì)放在代碼管理倉(cāng)庫(kù) Github 和 Gitee 上,方便大家取用。 參考 |
|
來(lái)自: 易禪浮屠 > 《小白學(xué)爬蟲(chóng)系列》