Pyhton + Selenium 安裝和使用

關(guān)于 Selenium

什么是 Selenium

Selenium 是支持 web 瀏覽器自動(dòng)化的一系列工具和庫(kù)的綜合項(xiàng)目。
它提供了擴(kuò)展來模擬用戶與瀏覽器的交互,用于擴(kuò)展瀏覽器分配的分發(fā)服務(wù)器,以及用于實(shí)現(xiàn) W3C WebDriver 規(guī)范 的基礎(chǔ)結(jié)構(gòu),該 規(guī)范 允許您為所有主要 Web 瀏覽器編寫可互換的代碼。

Selenium 可以做什么

使用 Selenium 可以操作瀏覽器從而實(shí)現(xiàn)自動(dòng)化測(cè)試,一般 selenium 可用于以下場(chǎng)景:

  • 對(duì)你開發(fā)的網(wǎng)站進(jìn)行自動(dòng)化測(cè)試,檢查網(wǎng)頁的表現(xiàn)是否符合預(yù)期設(shè)計(jì)
  • 完成一些自動(dòng)化任務(wù),如自動(dòng)簽到、自動(dòng)下單等
  • 爬蟲(雖然 Selenium 可用于爬蟲,但一般不單獨(dú)使用 selenium 爬取信息,尤其是對(duì)效率要求較高的情況,見下文對(duì)比)

和傳統(tǒng)爬蟲工具的差異

對(duì)于爬蟲,python 一般使用 Requests 獲取網(wǎng)頁內(nèi)容,然后使用 Beautiful Soup 進(jìn)行分析和抓取數(shù)據(jù)。

Selenium 也可以完成類似的功能。相對(duì)傳統(tǒng)方法,Selenium 是操縱瀏覽器,可以運(yùn)行頁面的 Javascript 腳本,因此如果網(wǎng)頁是由客戶端渲染的(如使用 Vue ,React 等渲染),Selenium 也可以渲染出內(nèi)容,而且還可以和網(wǎng)頁交互,這個(gè)是傳統(tǒng)方法無法做的(傳統(tǒng)方法只獲取 html 的原始內(nèi)容,并不會(huì)運(yùn)行任何 Javascript)。

但也正因?yàn)樾枰獑?dòng)瀏覽器和運(yùn)行 Javascript,Selenium 的啟動(dòng)時(shí)間較長(zhǎng),而且在爬取數(shù)據(jù)的效率方面遠(yuǎn)遠(yuǎn)也比不上傳統(tǒng)方法。

Selenium 也可以和 Beautiful Soup 結(jié)合使用,如使用 Selenium 完成登錄、渲染動(dòng)態(tài)頁面的工作,然后把得到的 html 內(nèi)容傳給 Beautiful Soup 進(jìn)行分析或獲取數(shù)據(jù)。

根據(jù)目的、渲染方式、和是否需要和頁面交互,可以總結(jié)如下:

目的 網(wǎng)頁渲染方式 需要和網(wǎng)頁交互 建議的方案
自動(dòng)化任務(wù) - Selenium
爬取數(shù)據(jù) 服務(wù)端渲染 Requests + Beautiful Soup
爬取數(shù)據(jù) 客戶端渲染 Selenium + Beautiful Soup

當(dāng)然,自動(dòng)任務(wù)、爬取數(shù)據(jù)也可以考慮直接分析網(wǎng)站的接口,通過直接請(qǐng)求接口的方式完成,效率也更高,不過這種方式暫不在本文的討論范圍 :) 。

安裝

安裝 WebDriver

Selenium 通過使用 WebDriver 支持市場(chǎng)上所有主流瀏覽器的自動(dòng)化。 Webdriver 是一個(gè) API 和協(xié)議,它定義了一個(gè)語言中立的接口,用于控制 web 瀏覽器的行為。 每個(gè)瀏覽器都有一個(gè)特定的 WebDriver 實(shí)現(xiàn),稱為驅(qū)動(dòng)程序。 驅(qū)動(dòng)程序是負(fù)責(zé)委派給瀏覽器的組件,并處理與 Selenium 和瀏覽器之間的通信。

Selenium 通過 WebDriver 控制不同瀏覽器,因此使用 selenium前必須安裝瀏覽器對(duì)應(yīng)的 WebDriver。
Selenium 目前支持的瀏覽器及其 WebDriver 下載地址:

瀏覽器 支持的操作系統(tǒng) 維護(hù)者 下載 問題追蹤
Chromium/Chrome Windows/macOS/Linux 谷歌 下載 問題
火狐 Windows/macOS/Linux Mozilla 下載 問題
Edge Windows 10 微軟 下載 問題
Internet Explorer Windows Selenium 項(xiàng)目組 下載 問題
Safari macOS El Capitan 及更高版本 蘋果 內(nèi)置 問題
Opera Windows/macOS/Linux Opera 下載 問題

可以根據(jù)自己的需要選擇要安裝的 WebDriver。

目前使用最為廣泛的瀏覽器是 Chrome,下文以 Chrome 作為例子展示在 Windows 系統(tǒng)下安裝 WebDriver 的過程。

安裝 ChromeDriver

下載 ChromeDriver

官網(wǎng) 下載 ChromeDriver(國(guó)內(nèi)也可以通過 淘寶鏡像 下載),注意 ChromeDriver 的版本必須要與本機(jī)安裝的 Chrome 大版本一致
要查看 Chrome 版本,可以打開 Chrome 的選項(xiàng),點(diǎn)擊幫助 -> 關(guān)于 Google Chrome:


選擇對(duì)應(yīng)的版本下載:

根據(jù)操作系統(tǒng)類型選擇合適的文件下載:

Windows 系統(tǒng)下載 chromedriver_win32.zip,解壓后得到 chromedriver.exe。
建議新建一個(gè) webdriver 目錄(如 C:\webdriver)存放 chromedriver.exe,這樣后續(xù)如果安裝其他 WebDriver 也可統(tǒng)一放在此目錄下。

添加到環(huán)境變量 Path

把 webdriver 目錄加入到環(huán)境變量 Path:


測(cè)試 ChromeDriver

在命令行輸入 chromedriver,出現(xiàn)以下內(nèi)容則表示安裝成功:


安裝 Python

這里略過 Python 的安裝,可以自行參考別的文章。本文使用 Python 3.8.4.

安裝 Selenium

python 可以 pip 安裝 Selenium 庫(kù):

pip install selenium

編寫腳本

編寫一個(gè)簡(jiǎn)單的腳本測(cè)試下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 配置chromedriver
options = Options()
# 非沙盒模式,不使用此配置在部分情況下可能無法啟動(dòng)
options.add_argument('--no-sandbox')
# 最大化
options.add_argument('--start-maximized')
options.add_argument('--disable-gpu')

with webdriver.Chrome(options=options) as driver:
    # 打開百度首頁
    driver.get('https://www.baidu.com')

    # 設(shè)置等待,超時(shí)時(shí)間為10秒
    wait = WebDriverWait(driver, 10)

    # 根據(jù)id找到輸入框
    input_field = driver.find_element_by_id('kw')
    input_field.send_keys('selenium')

    # 根據(jù)id找到搜索按鈕
    search_button = driver.find_element_by_id('su')
    search_button.click()

    # 等待搜索結(jié)果出現(xiàn),這里通過判斷content_left是否可見來確定
    content = wait.until(
        EC.visibility_of_element_located((By.ID, 'content_left')))

    # 獲取搜索結(jié)果
    items = content.find_elements_by_css_selector(
        '.result.c-container.new-pmd')
    for item in items:
        # 獲取標(biāo)題的文本
        title = item.find_element_by_css_selector('h3 a').text
        print(title)

以上腳本完成了打開百度自動(dòng)搜索,并獲取第一頁的搜索結(jié)果(不含廣告ヽ(??▽?)ノ):


最后總結(jié)下使用 Selenium 編寫腳本的基本流程是:

  • 打開目標(biāo)網(wǎng)頁
  • 根據(jù) id,class,css 選擇器、xpath 等,獲取目標(biāo)元素
  • 獲取目標(biāo)元素的內(nèi)容,或者和目標(biāo)元素互動(dòng)(點(diǎn)擊、拖動(dòng)等)
  • 等待網(wǎng)頁渲染出想要的內(nèi)容
  • ...

基本流程和真人使用瀏覽器的過程相同,只是從人手操作改成使用代碼操作。

總結(jié)

Selenium 的功能相當(dāng)強(qiáng)大,可操作瀏覽器完成各種任務(wù)。上手也比較容易,如果掌握一點(diǎn)前端知識(shí)使用起來會(huì)更加方便。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。