selenium驅動未隨瀏覽器更新而同步更新的問題
基于selenium模擬谷歌瀏覽器登錄時,依賴chromedriver.exe版本信息。但谷歌瀏覽器升級后,之前創建的腳本可能會出現因驅動版本過低,使得之前創建的腳本運行失敗的問題。
下面針對該問題進行探索和解決。
selenium版本
import selenium
selenium.__version__
#'4.7.2'
獲取谷歌瀏覽器版本信息
import platform
import subprocess
system = platform.system()
if system == 'Windows':
cmd = r'reg query "HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon" /v version'
output = subprocess.check_output(cmd, shell=True)
version = output.split()[-1].decode()
elif system == 'Darwin':
cmd = r'/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version'
output = subprocess.check_output(cmd, shell=True)
version = output.split()[2].decode()
else:
cmd = r'google-chrome --version'
output = subprocess.check_output(cmd, shell=True)
version = output.split()[2].decode()
print('當前谷歌瀏覽器版本為:', version)

獲取驅動的版本信息

驅動下載鏡像:
首先我們先查看電腦上有幾個chromedriver.exe:

運行結果信息:
# -*- coding=utf-8-*-
import os
from selenium import webdriver
# 獲取chromedriver.exe的路徑
driver_path = os.path.join(os.getcwd(), "chromedriver.exe")
# 初始化Chrome瀏覽器,注意需要將executable_path參數指向chromedriver.exe的路徑
print(f"driver_path={driver_path}")
browser = webdriver.Chrome(executable_path=driver_path)
# 獲取chromedriver.exe的版本信息
print("chromedriver.exe version:", browser.capabilities['chrome']['chromedriverVersion'])
# 關閉瀏覽器
browser.quit()
"""
driver_path=E:\python_scripts\python\Happy100\selenium\chromedriver.exe
chromedriver.exe version: 112.0.5615.49 (bd2a7bcb881c11e8cfe3078709382934e3916914-refs/branch-heads/5615@{#936})
"""
其與當前谷歌瀏覽器保持一致。這是為什么呢?我們重新查找chromedriver.exe:發現,在系統盤新增了一個臨時文件,上述腳本訪問的是該路徑下的驅動。
可能原因是:當前Python環境下無對應的驅動,算法自動下載了最新版本的驅動。

進一步驗證:我們先刪除上述臨時驅動,然后下載一個舊的驅動版本(70.0.3538.16,并將其移至anaconda路徑下),然后重新運行腳本:

在jupyter中執行運行下述命令:
driver = webdriver.Chrome()
"""
SessionNotCreatedException: Message: session not created: Missing or invalid capabilities
(Driver info: chromedriver=70.0.3538.16 (16ed95b41bb05e565b11fb66ac33c660b721f778),platform=Windows NT 10.0.22000 x86_64)
#和實際相符
"""
此時查詢chromedriver.exe并未出現新增。
然后我們重新運行GPT提供的腳本:

其輸出仍然是[谷歌瀏覽器]的版本信息;未獲取到真正的版本信息。
結論:
在python環境中配置驅動(
chromedriver.exe放置在anaconda安裝路徑下)的方式,但瀏覽器更新時,驅動不會及時得到更新;上述獲取
chromedriver.exe不能獲取有效的驅動版本信息;在不配置驅動(
chromedriver.exe)的情況下,算法第一次調用時會自行下載對應的驅動文件(ps:早些版本貌似必須安裝驅動)
官方幫助文檔

小結
未配置的情況下
安裝第三方庫:(Github傳送門)
pip install webdriver-manager
在第一次調用是會自動下載對應的驅動文件;
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium import webdriver
service = ChromeService(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.quit()
已經配置的情況
下載最新的驅動,然后去目標路徑下替換對應的驅動即可;
將最新驅動下載到指定的路徑下
核心:添加path參數,用于控制最新驅動的緩存;
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium import webdriver
try:
driver = webdriver.Chrome()
except SessionNotCreatedException:
#anacaonda安裝路徑
service = ChromeService(executable_path=ChromeDriverManager(path=r"D:\software\Anaconda3").install())
driver = webdriver.Chrome(service=service)

浙公網安備 33010602011771號