天天看點

一篇文章帶你學會兩個場景下Selenium爬取動态網頁小技巧

/1 前言/

selenium是一個用于Web應用程式測試的工具。Selenium測試直接運作在浏覽器中,就像真正的使用者在操作一樣,是爬複雜動态網頁的必備工具。支援的浏覽器包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。

這裡分兩個場景,給大家介紹Selenium爬動态網頁小技巧。

/2 場景一:替換日期控件值/

以12306網站為例,如下圖所示,按照正常的方法,我們首先要定位到時間元素,然後調用selenium的click()方法進行點選。

這種操作也是可行的。但是,過了一段時間,我們再次運作自動化代碼的時候,就會發現功能運作不正常。因為日期更改後,月曆控件布局發生了變化,而且操作起來很麻煩。

我們先看一下日期框的元素,如下圖所示:

重點看一下value=‘text’,這種屬性值可以通過JavaScript來改變,三行代碼就能解決這個問題,如下圖所示:

第一行是要輸入的日期,第二行是JavaScript代碼,“documen.getElementById”是通過HTML的“id”定位元素,通過改變該元素的“value”實作值的變化。

效果示範如下:

/3 場景二:動态網頁自動下拉/

一些複雜的動态網頁需要下拉才能把元素顯示完全,例如騰訊視訊首頁,如下圖所示:

如果需要自動爬取這類動态網頁,我們同樣可以執行JavasScript的方法來實作,用5行代碼就可以連續滑動網頁,将動态網頁元素全部展示出來,代碼如下圖所示:

小編這裡采取的分步下拉的方法,每次滾動1/10,“window.scrollTo”為向下滑動的指令,“document.body.clientHeight”為整個視窗的高度,“h=(i/10)”為每次滑動的高度。

/4 結語/

将JavaScript應用到selenium中可以幫我們解決很多問題,這裡舉兩個小例子隻是抛磚引玉,希望大家以後遇到selenium不好解決的問題時可以考慮在JavaScript身上尋找突破。

歡迎大家積極嘗試,消耗在家的無聊時間。本文涉及的代碼都上傳到了github位址上,背景回複“selenium”這個單詞即可擷取代碼。

繼續閱讀