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
默认会缓存下载的驱动,并在新版本发布时更新。对于调试和开发,可以通过环境变量控制日志输出和缓存政策。