一篇文章帶你學(xué)會(huì)兩個(gè)場(chǎng)景下 Selenium 爬取動(dòng)態(tài)網(wǎng)頁(yè)小技巧
“
閱讀本文大概需要 3 分鐘。
Selenium 是一個(gè)用于 Web 應(yīng)用程序測(cè)試的工具。Selenium 測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣,是爬復(fù)雜動(dòng)態(tài)網(wǎng)頁(yè)的必備工具。支持的瀏覽器包括 IE,Mozilla Firefox,Safari,Google Chrome,Opera 等。
這里分兩個(gè)場(chǎng)景,給大家介紹 Selenium 爬動(dòng)態(tài)網(wǎng)頁(yè)小技巧。
場(chǎng)景一:替換日期控件值
以 12306 網(wǎng)站為例,如下圖所示,按照正常的方法,我們首先要定位到時(shí)間元素,然后調(diào)用 Selenium 的 click() 方法進(jìn)行點(diǎn)擊。

這種操作也是可行的。但是,過(guò)了一段時(shí)間,我們?cè)俅芜\(yùn)行自動(dòng)化代碼的時(shí)候,就會(huì)發(fā)現(xiàn)功能運(yùn)行不正常。因?yàn)槿掌诟暮?,日歷控件布局發(fā)生了變化,而且操作起來(lái)很麻煩。
我們先看一下日期框的元素,如下圖所示:

重點(diǎn)看一下 value=‘text’,這種屬性值可以通過(guò) JavaScript 來(lái)改變,三行代碼就能解決這個(gè)問(wèn)題,如下圖所示:

第一行是要輸入的日期,第二行是 JavaScript 代碼,“documen.getElementById”是通過(guò) HTML 的“id”定位元素,通過(guò)改變?cè)撛氐摹皏alue”實(shí)現(xiàn)值的變化。
效果演示如下:
場(chǎng)景二:動(dòng)態(tài)網(wǎng)頁(yè)自動(dòng)下拉
一些復(fù)雜的動(dòng)態(tài)網(wǎng)頁(yè)需要下拉才能把元素顯示完全,例如騰訊視頻主頁(yè),如下圖所示:

如果需要自動(dòng)爬取這類動(dòng)態(tài)網(wǎng)頁(yè),我們同樣可以執(zhí)行 JavasScript 的方法來(lái)實(shí)現(xiàn),用? 5 行代碼就可以連續(xù)滑動(dòng)網(wǎng)頁(yè),將動(dòng)態(tài)網(wǎng)頁(yè)元素全部展示出來(lái),代碼如下圖所示:

小編這里采取的分步下拉的方法,每次滾動(dòng) 1/10,“window.scrollTo”為向下滑動(dòng)的命令,“document.body.clientHeight”為整個(gè)窗口的高度,“h=(i/10)”為每次滑動(dòng)的高度。
效果演示如下:
結(jié)語(yǔ)
將 JavaScript 應(yīng)用到 Selenium 中可以幫我們解決很多問(wèn)題,這里舉兩個(gè)小例子只是拋磚引玉,希望大家以后遇到 Selenium 不好解決的問(wèn)題時(shí)可以考慮在 JavaScript 身上尋找突破。
推薦閱讀
1
2
3
4??
使用 Python 遠(yuǎn)程登陸服務(wù)器的最佳實(shí)踐
