python爬蟲Selenium庫詳細教程
在我們爬取網頁過程中,經常發現我們想要獲得的資料並不能簡單的通過解析HTML程式碼獲取,這些資料是通過AJAX非同步載入方式或經過JS渲染後才呈現在頁面上顯示出來。
selenuim是一種自動化測試工具,它支援多種瀏覽器。而在爬蟲中,我們可以使用它來模擬瀏覽器瀏覽頁面,進而解決JavaScript渲染的問題。
本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並不斷的成長,掌握Python核心技術,才是掌握真正的價值所在。
1. 使用示例
2. 詳細介紹
2.1 宣告瀏覽器物件
即告訴程式,應該使用哪個瀏覽器進行操作
2.2 訪問頁面
2.3 查詢元素
成功訪問網頁後,我們可能需要進行一些操作,比如找到搜尋框然後輸入關鍵字再敲擊回車鍵。
因此,就需要在selenium中查詢元素。
2.3.1 單個元素
selenium查詢元素有兩種方法。
第一種,是指定使用哪種方法去查詢元素,比如指定依照CSS選擇或者依照xpath去進行查詢
下面是詳細的元素查詢方法
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
第二種,是直接使用find_element(),傳入的第一個引數為需要使用的元素查詢方法
2.3.2 多個元素
查詢多個元素和查詢單個元素的方法基本一致(只需要將查詢單個元素的func里加一個s)。
查詢多個元素返回的是一個list。
2.4 元素互動操作
元素互動是先獲取一個元素,然後對獲取的元素呼叫互動方法。
比如說在搜尋框內輸入文字:
2.5 互動動作
互動動作是將動作附加到互動鏈中序列執行,需要使用到ActionChains。
2.6 執行JavaScript
比如拖拽下拉
2.7 獲取元素資訊
已經通過元素查詢獲取到元素後,可能還需要獲取這個元素的屬性、文字
2.7.1 獲取屬性
2.8 Frame
如果定位到父frame,是無法查詢到子frame的資訊的,因此需要切換到子frame再進行查詢。同理,在子frame也無法查詢到父frame的資訊
2.9 等待
請求網頁時,可能會存在AJAX非同步載入的情況。而selenium只會載入主網頁,並不會考慮到AJAX的情況。因此,使用時需要等待一些時間,讓網頁載入完全後再進行操作。
2.9.1 隱式等待
使用隱式等待時,如果webdriver沒有找到指定的元素,將繼續等待。超出規定時間後,如果還是沒又找到指定元素則丟擲找不到元素的異常。預設等待時間為0。
隱式等待是對整個頁面進行等待。
需要特別說明的是:隱性等待對整個driver的週期都起作用,所以只要設定一次即可。
2.9.2 顯式等待
顯示等待包含了等待條件和等待時間。
首先判定等待條件是否成立,如果成立,則直接返回;如果條件不成立,則等待最長時間為等待時間,如果超過等待時間後仍然沒有滿足等待等待條件,則丟擲異常。
顯式等待是對指定的元素進行等待。
2.10 瀏覽器的前進/後退
back實現回到前一頁面,forward實現前往下一頁面
2.11 對Cookies進行操作
2.12 選項卡管理
選項卡管理就是瀏覽器的標籤。有些時候我們需要在瀏覽器裡增加一個新標籤頁或者刪除一個標籤頁,就可以使用selenium來實現。