selenium用法詳解【從入門到實戰】【Python爬蟲】【篇一】
簡介
Selenium 是最廣泛使用的開源 Web UI(用戶界面)自動化測試套件之一。Selenium 支持的語言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驅動程序最受 Python 和 C#歡迎。 Selenium 測試腳本可以使用任何支持的編程語言進行編碼,并且可以直接在大多數現代 Web 瀏覽器中運行。在爬蟲領域 selenium 同樣是一把利器,能夠解決大部分的網頁的反爬問題。下面就進入正式的 study 階段。
selenium安裝
打開 cmd,輸入下面命令進行安裝。
pip install -i https://pypi.douban.com/simple selenium
執行后,使用 pip show selenium 查看是否安裝成功。
安裝瀏覽器驅動
針對不同的瀏覽器,需要安裝不同的驅動。下面列舉了常見的瀏覽器與對應的驅動程序下載鏈接,部分網址需要 “科學上網” 才能打開哦(dddd)。
Firefox 瀏覽器驅動:Firefox
Chrome 瀏覽器驅動:Chrome
IE 瀏覽器驅動:IE
Edge 瀏覽器驅動:Edge
PhantomJS 瀏覽器驅動:PhantomJS
Opera 瀏覽器驅動:Opera
這里以安裝 Chrome 驅動作為演示。但 Chrome 在用 selenium 進行自動化測試時還是有部分 bug ,常規使用沒什么問題,但如果出現一些很少見的報錯,可以使用 Firefox 進行嘗試,畢竟是 selenium 官方推薦使用的。
確定瀏覽器版本
在新標簽頁輸入 chrome://settings/ 進入設置界面,然后選擇 【關于 Chrome】
查看自己的版本信息。這里我的版本是94,這樣在下載對應版本的 Chrome 驅動即可。
下載驅動
打開 Chrome驅動 。單擊對應的版本。
根據自己的操作系統,選擇下載。
下載完成后,壓縮包內只有一個 exe 文件。
將 chromedriver.exe 保存到任意位置,并把當前路徑保存到環境變量中(我的電腦>>右鍵屬性>>高級系統設置>>高級>>環境變量>>系統變量>>Path),添加的時候要注意不要把 path 變量給覆蓋了,如果覆蓋了千萬別關機,然后百度。添加成功后使用下面代碼進行測試。
from selenium import webdriver # Chrome瀏覽器 driver = webdriver.Chrome()
定位頁面元素
打開指定頁面
使用 selenium 定位頁面元素的前提是你已經了解基本的頁面布局及各種標簽含義,當然如果之前沒有接觸過,現在我也可以帶你簡單的了解一下。
以我們熟知的 CSDN 為例,我們進入首頁,按 【F12】 進入開發者工具。紅框中顯示的就是頁面的代碼,我們要做的就是從代碼中定位獲取我們需要的元素。
想要定位并獲取頁面中的信息,首先要使用 webdriver 打開指定頁面,再去定位。
from selenium import webdriver # Chrome瀏覽器 driver = webdriver.Chrome() driver.get('https://www.csdn.net/')
執行上面語句后會發現,瀏覽器打開 CSDN 主頁后會馬上關閉,想要防止瀏覽器自動關閉,可以添加下面代碼。
# 不自動關閉瀏覽器 option = webdriver.ChromeOptions() option.add_experimental_option("detach", True) # 將option作為參數添加到Chrome中 driver = webdriver.Chrome(chrome_options=option)
這樣將上面的代碼組合再打開瀏覽器就不會自動關閉了。
from selenium import webdriver # 不自動關閉瀏覽器 option = webdriver.ChromeOptions() option.add_experimental_option("detach", True) # 注意此處添加了chrome_options參數 driver = webdriver.Chrome(chrome_options=option) driver.get('https://www.csdn.net/')
下面我們再來看看幾種常見的頁面元素定位方式。
id 定位
標簽的 id 具有唯一性,就像人的身份證,假設有個 input 標簽如下。
我們可以通過 id 定位到它,由于 id 的唯一性,我們可以不用管其他的標簽的內容。
driver.find_element_by_id("toolbar-search-input")
name 定位
name 指定標簽的名稱,在頁面中可以不唯一。假設有個 meta 標簽如下
我們可以使用 find_element_by_name 定位到 meta 標簽。
driver.find_element_by_name("keywords")
class 定位
class 指定標簽的類名,在頁面中可以不唯一。假設有個 div 標簽如下