Selenium 是一款強大的自動化測試工具,可用于模擬用戶在瀏覽器中的各種操作。它支持多種瀏覽器(如 Chrome、Firefox、Edge 等)和多種編程語言(如 Python、Java、C# 等),廣泛應用于 Web 應用程序的自動化測試、網頁數據爬取、自動化操作等場景。
一、Selenium 的安裝
要開始使用 Selenium,首先需要安裝它。使用 Python 的 pip 包管理器可以輕松完成安裝。打開命令行終端,并執行以下命令:
pip install selenium
如果你使用的是虛擬環境,請確保在激活虛擬環境后再執行此命令。安裝完成后,你就可以在 Python 代碼中導入并使用 Selenium 庫了。
在安裝過程中,可能會遇到一些常見問題,下面是一些解決方案:
- 網絡問題:如果在執行
pip install
命令時遇到網絡連接超時或失敗的情況,可以嘗試使用國內的鏡像源來加速下載。例如,使用清華大學的 pip 鏡像:
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
- 權限問題:如果你沒有足夠的權限在全局環境中安裝包,可能會看到 "Permission denied" 錯誤。此時,可以考慮以下兩種解決方案:
- 使用虛擬環境:虛擬環境可以讓你在項目特定的環境中安裝包,而不需要管理員權限。創建和激活虛擬環境的命令如下:
# 創建虛擬環境 python -m venv myenv# 激活虛擬環境(Windows) myenv\Scripts\activate# 激活虛擬環境(Linux/Mac) source myenv/bin/activate
- 使用
--user
選項:在安裝命令后添加--user
選項,將包安裝到用戶目錄下:pip install selenium --user
- 使用虛擬環境:虛擬環境可以讓你在項目特定的環境中安裝包,而不需要管理員權限。創建和激活虛擬環境的命令如下:
安裝完成后,你可以通過以下代碼驗證 Selenium 是否安裝成功:
import selenium
print(selenium.__version__) # 打印Selenium版本號
如果能夠正常打印出版本號,說明 Selenium 已經成功安裝。
二、Edge 瀏覽器驅動的下載與配置
Selenium 需要對應的瀏覽器驅動才能控制瀏覽器。對于 Edge 瀏覽器,你需要下載 Microsoft Edge WebDriver。
-
確定 Edge 瀏覽器版本:打開 Edge 瀏覽器,點擊右上角的三個點(...),選擇 "幫助和反饋" > "關于 Microsoft Edge",查看版本號。版本號通常顯示為類似于 "114.0.1823.51" 的格式。
-
下載對應版本的 WebDriver:訪問?Microsoft Edge WebDriver 下載頁面,選擇與你瀏覽器版本匹配的 WebDriver 進行下載。具體步驟如下:
- 在下載頁面中,找到與你 Edge 瀏覽器版本完全匹配的 WebDriver 版本。如果找不到完全匹配的版本,選擇最接近且不高于你瀏覽器版本的驅動。
- 根據你的操作系統(Windows、macOS 或 Linux)選擇相應的下載包。
- 下載完成后,得到一個壓縮文件(如.zip 或.msi 格式)。
-
解壓并放置驅動文件:將下載的壓縮包解壓,得到一個 exe 文件(如 msedgedriver.exe)。將此文件放在 Python 解釋器的根目錄中。你可以通過以下 Python 代碼查看解釋器的根目錄:
import sys
print(sys.executable)
執行上述代碼后,會輸出 Python 解釋器的路徑,例如:
C:\Python39\python.exe
在這個例子中,Python 解釋器的根目錄是C:\Python39\
,你需要將msedgedriver.exe
文件復制到這個目錄中。
除了將驅動文件放在 Python 解釋器根目錄外,還有其他幾種配置方式:
-
將驅動路徑添加到系統環境變量:
- 右鍵點擊 "此電腦",選擇 "屬性"
- 點擊 "高級系統設置"
- 在 "系統屬性" 窗口中,點擊 "環境變量" 按鈕
- 在 "系統變量" 列表中,找到 "Path" 變量,點擊 "編輯"
- 點擊 "新建",添加驅動文件所在的目錄路徑
- 確認所有窗口,使更改生效
-
在代碼中顯式指定驅動路徑:
如果你不想修改系統環境變量或 Python 解釋器目錄,也可以在代碼中明確指定驅動的路徑:from selenium import webdriver from selenium.webdriver.edge.service import Service# 顯式指定驅動路徑 edge_driver_path = "D:/webdrivers/msedgedriver.exe" # 根據實際路徑修改 service = Service(edge_driver_path) driver = webdriver.Edge(service=service)
三、使用 Selenium 打開瀏覽器
下面是一個簡單的 Python 代碼示例,展示如何使用 Selenium 打開 Edge 瀏覽器并訪問百度網站:
from selenium import webdriver
from selenium.webdriver.edge.service import Service
import time# 設置Edge驅動的路徑
edge_driver_path = "msedgedriver.exe" # 如果已放在Python根目錄,可直接這樣寫# 創建Service對象
service = Service(edge_driver_path)# 創建Edge瀏覽器實例
driver = webdriver.Edge(service=service)try:# 打開百度網站driver.get("https://www.baidu.com")# 獲取頁面標題并打印title = driver.titleprint(f"當前頁面標題: {title}")# 等待5秒鐘,以便觀察time.sleep(5)except Exception as e:print(f"發生錯誤: {e}")
finally:# 關閉瀏覽器driver.quit()
在上述代碼中,我們首先導入了必要的模塊,然后創建了一個 Edge 瀏覽器的 Service 對象,接著使用該 Service 創建了瀏覽器實例。通過get
方法打開了百度網站,使用time.sleep
讓程序暫停 5 秒以便我們觀察,最后使用quit
方法關閉了瀏覽器。
讓我們詳細分析一下這段代碼:
-
導入模塊:
webdriver
:提供了各種瀏覽器的驅動類Service
:用于配置和啟動瀏覽器驅動服務time
:用于添加延時,方便觀察程序執行過程
-
創建瀏覽器實例:
- 通過
Service
類指定驅動路徑 - 使用
webdriver.Edge
創建 Edge 瀏覽器實例
- 通過
-
瀏覽器操作:
driver.get(url)
:打開指定 URL 的網頁driver.title
:獲取當前頁面的標題driver.quit()
:關閉瀏覽器并終止驅動服務
-
異常處理:
- 使用
try-except-finally
結構確保即使發生異常,瀏覽器也能被正確關閉
- 使用
?????四、Selenium 網頁圖片提取實戰
下面我們通過一個實戰項目,展示如何使用 Selenium 從網頁上提取圖片。我們以 Unsplash 網站(一個提供高質量免費圖片的網站)為例,提取搜索結果中的圖片鏈接。
from selenium import webdriver
from selenium.webdriver.edge.options import Options
import re
import requests
import time
edgetest=Options() #Option對象用于對瀏覽器行為與屬性的配置
#binary_location指明驅動的瀏覽器二進制文件地址,因為用戶的默認的瀏覽器不一定是edge瀏覽器
edgetest.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver=webdriver.Edge(options=edgetest)
driver.get('https://www.ptpress.com.cn/search?keyword=python&jc=')#進入人民郵電出版社界面
time.sleep(1)#讓程序休眠1秒,讓頁面加載出來,不加可能導致頁面未加載出來就退出
#正則表達式從源碼中提取圖片地址
ls=re.findall(r'<img src="(.+?jpg)"></div>',driver.page_source)
i=1
for url in ls:r=requests.get(url)with open('zxc\\'+str(i)+'.jpg','wb') as f:#在當前的相對路徑下已經創建了zxc這個文件夾。f.write(r.content)i+=1
這個代碼實現了以下功能:
1.?瀏覽器配置與初始化
-
指定瀏覽器路徑:通過
Options
類設置 Edge 瀏覽器的安裝路徑(默認為系統默認位置)。 -
創建瀏覽器實例:啟動 Edge 瀏覽器并準備訪問網頁。
2.?訪問目標網頁
-
搜索關鍵詞:打開人民郵電出版社的搜索頁面,自動填入關鍵詞
python
,并加載搜索結果。 -
強制等待:使用
time.sleep(1)
暫停 1 秒,確保頁面元素加載完成(此方法不夠可靠,后續可優化)。
3.?提取圖片 URL
-
獲取頁面源碼:通過
driver.page_source
獲取當前頁面的 HTML 代碼。 -
正則表達式匹配:使用正則表達式
<img src="(.+?jpg)"></div>
提取所有圖片 URL。-
該正則假設圖片標簽緊跟在
</div>
前,且 URL 以.jpg
結尾。
-
4.?下載并保存圖片
-
遍歷 URL 列表:對每個匹配到的圖片 URL,使用
requests.get()
發送 HTTP 請求下載圖片內容。 -
保存文件:將圖片內容寫入本地文件,命名為
1.jpg
,?2.jpg
等,保存在當前目錄下的zxc
文件夾中。