python 爬蟲 Selenium 庫詳細教程

在我們爬取網頁過程中,經常發現我們想要獲得的數據並不能簡單的通過解析 HTML 代碼獲取,這些數據是通過 AJAX 異步加載方式或經過 JS 渲染後才呈現在頁面上顯示出來。

selenuim 是一種自動化測試工具,它支持多種瀏覽器。而在爬蟲中,我們可以使用它來模擬瀏覽器瀏覽頁面,進而解決 JavaScript 渲染的問題。

  1. 使用示例

  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 來實現。

聲明:

本文於網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯繫我們刪除或授權事宜。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/R5tZIk6DUwoZA9YKFUkxew