Skip to content

解决 Selenium 中 executable_path 已弃用的问题

问题描述

在使用 Selenium 进行 Python 自动化测试时,很多开发者会遇到以下警告信息:

python
Demo.py:7: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(ChromeDriverManager().install())

这个警告出现在 Selenium 4 及以上版本中,表明 executable_path 参数已被弃用,需要使用新的 Service 对象来替代。

解决方案

根据 Selenium 版本不同,有几种解决方案可供选择:

方案一:使用 Service 对象(推荐)

这是最标准的解决方案,适用于大多数情况:

python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# 创建 Service 对象并安装 ChromeDriver
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.get("https://www.google.com")

如果还需要设置浏览器选项:

python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

options = Options()
options.add_argument("start-maximized")  # 启动时最大化窗口

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
driver.get("https://www.google.com")

方案二:Selenium 4.6.0+ 自动管理驱动

从 Selenium 4.6.0 版本开始,Selenium 内置了 Selenium Manager,可以自动管理浏览器驱动,无需额外安装 webdriver-manager

python
from selenium import webdriver

# Selenium Manager 会自动下载和管理所需的驱动
driver = webdriver.Chrome()
driver.get("https://www.google.com")

TIP

这是最简单的解决方案,推荐新项目直接使用此方法。

方案三:手动指定驱动路径

如果你已经手动下载了 ChromeDriver,可以使用以下方式:

python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# 指定 ChromeDriver 的完整路径
service = Service(r"C:\path\to\chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.get("https://www.google.com")

不同浏览器的解决方案

Firefox 浏览器

python
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager

service = Service(GeckoDriverManager().install())
driver = webdriver.Firefox(service=service)

使用 chromedriver-autoinstaller

python
from selenium import webdriver
import chromedriver_autoinstaller
from selenium.webdriver.chrome.service import Service

chromedriver_autoinstaller.install()
driver = webdriver.Chrome(service=Service())

Selenium 版本要求

确保你使用的是 Selenium 4.0.0 或更高版本:

bash
pip install -U selenium

如果需要使用 WebDriver 自动管理功能,还需安装:

bash
pip install webdriver-manager

原理解析

Selenium 4 引入了 Service 类来替代直接传递 executable_path 的方式,这样做的好处是:

  1. 更好的封装性:将驱动管理逻辑封装在 Service 对象中
  2. 更清晰的 API:分离了浏览器选项和驱动服务配置
  3. 更好的扩展性:为未来功能扩展提供了更好的基础

常见问题

升级后代码不工作怎么办?

如果升级到新版本后代码无法工作,可以尝试:

  1. 检查 Selenium 版本:pip show selenium
  2. 确认浏览器和驱动版本匹配
  3. 清理旧的驱动缓存文件

企业环境下无法自动下载驱动怎么办?

在企业网络环境下,自动下载可能受限,此时可以选择:

  1. 手动下载驱动并指定路径
  2. 配置网络代理
  3. 使用内部镜像源

总结

Selenium 4 中 executable_path 参数的弃用是框架演进的一部分,新的 Service 对象提供了更清晰和强大的驱动管理方式。根据你的具体需求:

  • 新项目:直接使用 Selenium 4.6.0+ 的自动驱动管理
  • 现有项目升级:使用 Service 对象替换 executable_path
  • 特定环境:手动管理驱动路径

遵循这些最佳实践,可以确保你的 Selenium 代码既符合当前标准,又具有良好的向前兼容性。