ChromeDriverManager
是 webdriver_manager
庫的一部分,它用于自動管理 ChromeDriver 的下載和更新。使用 ChromeDriverManager
可以避免手動下載 ChromeDriver 并匹配系統中安裝的 Chrome 瀏覽器版本。以下是 ChromeDriverManager
的基本用法:
步驟
1.安裝?webdriver_manager
庫:
pip install webdriver-manager
2.導入相關依賴
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
3.設置options參數(optional)
這邊因為博主要做CI/CD?需要進行無頭模式的設置所以是必需的
# 設置 Chrome 選項(如果需要)
chrome_options = Options()
chrome_options.add_argument("--headless") # 無頭模式
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
4.用chromedrivermanager安裝驅動?
# 使用 ChromeDriverManager 處理驅動安裝
driver_path = ChromeDriverManager().install()
service = Service(driver_path)
代碼解釋:
-
ChromeDriverManager().install()
:-
目標: 自動管理 ChromeDriver 的安裝。
-
功能:
ChromeDriverManager()
是webdriver_manager
包中的一個類,它負責管理 Chrome 瀏覽器驅動的下載和更新。 -
方法
install()
: 此方法檢查系統上是否已經安裝了 ChromeDriver,以及它的版本是否與系統上的 Google Chrome 瀏覽器兼容。如果沒有安裝或者版本不正確,它會自動下載與當前 Chrome 瀏覽器版本兼容的 ChromeDriver。 -
結果:
install()
返回下載的 ChromeDriver 的文件路徑。這是一個可執行文件的路徑,通常是chromedriver
二進制文件在你的本地機器上的位置。
-
-
Service(driver_path)
:-
目標: 啟動 Selenium 的 Chrome WebDriver 服務。
-
功能:
Service
是 Selenium 中的一個類,用于代表驅動程序的后臺服務。它主要負責啟動、終止和管理生命周期中的驅動進程。 -
參數
driver_path
: 這是 ChromeDriver 在本地系統上的路徑,由ChromeDriverManager().install()
返回。將此路徑傳遞給Service
構造函數來告訴 Selenium 如何找到和使用 ChromeDriver。 -
使用: 當你創建一個
webdriver.Chrome
實例時,你可以將創建好的Service
對象作為參數傳遞,使得 WebDriver 能夠啟動并與驅動程序正常通信。
-
整個過程:
-
通過
ChromeDriverManager().install()
,避免手動下載并管理 ChromeDriver 的版本問題。 -
創建一個
Service
對象來確保在啟動 WebDriver 時能夠正確地引用和使用 ChromeDriver。 -
最終用于初始化 WebDriver(例如
webdriver.Chrome(service=service)
)來啟動一個新的瀏覽器實例。
這種方法簡化了驅動安裝的管理,確保了驅動程序與瀏覽器版本的兼容性,同時提高了代碼的可維護性和穩定性。無論是在本地開發還是在CI/CD環境中,這種自動化驅動管理的方式都非常有用。
?
5.初始化并執行測試
# 正確的 WebDriver 初始化方式
driver = webdriver.Chrome(service=service)# 使用 WebDriver 做一些事情
driver.get("https://example.com")
print(driver.title)# 關閉瀏覽器
driver.quit()
基本用法示例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager# 使用 ChromeDriverManager 處理驅動安裝
driver_path = ChromeDriverManager().install()
service = Service(driver_path)# 正確的 WebDriver 初始化方式
driver = webdriver.Chrome(service=service)# 使用 WebDriver 做一些事情
driver.get("https://stage.me.sap.com/createIssue/0")
print(driver.title)# 關閉瀏覽器
driver.quit()
注意:
在較新的 Selenium 版本中,webdriver.Chrome
的構造函數不再接受 executable_path
作為參數,而是使用 Service
對象來指定 ChromeDriver 的路徑。?如果還用老的方法會出現下面的報錯
# 創建 webdriver.Chrome 實例
driver = webdriver.Chrome(executable_path=driver_path)# 使用 WebDriver
driver.get("https://www.example.com")
TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path'
拓展(可自行了解
-
自動下載和更新:
ChromeDriverManager().install()
方法會自動下載與系統安裝的 Chrome 版本兼容的 ChromeDriver(如果未安裝或版本過舊則更新)。
-
版本控制:
- 可以指定 ChromeDriver 的版本,比如使用
ChromeDriverManager(version='2.46').install()
來安裝特定版本的驅動。
- 可以指定 ChromeDriver 的版本,比如使用
-
自定義路徑:
- 如果需要把下載的驅動放在特定路徑,可以在運行時設置相關的環境變量來管理下載目錄:
import os from webdriver_manager.chrome import ChromeDriverManageros.environ['WDM_LOCAL'] = '1' # 啟用本地目錄使用 os.environ['WDM_DIR'] = '/path/to/store/drivers'driver_path = ChromeDriverManager().install()
-
日志和緩存控制:
webdriver_manager
默認會緩存下載的驅動,并在新版本發布時更新。對于調試和開發,可以通過環境變量控制日志輸出和緩存政策。
?