返回

您遇到过「“TypeError: WebDriver.__init__() got multiple values for argument ‘options‘”」错误吗?

前端

WebDriver.init() 选项错误:揭秘成因和解决方法

在 WebDriver 测试的编码之旅中,您可能遇到过令人抓狂的错误:“TypeError: WebDriver.init() got multiple values for argument ‘options‘”。不要惊慌,让我们揭开它的谜底,并探索解决方法。

缘起:为何会发生此错误?

在较早版本的 Selenium 中,您可以使用 executeable_path 参数指定 chromedriver 的路径。然而,从版本 4.10 开始,executeable_path 已弃用,取而代之的是 service 参数。此更改旨在简化 WebDriver 二进制文件的管理。

解决方案:如何修复此错误?

修复此错误很简单,只需按照以下步骤操作:

  1. 降级 Selenium 版本: 您可以将 Selenium 降级到 4.9.0 或更低版本。这将恢复对 executeable_path 参数的支持。

  2. 使用 service 参数: 如果您想坚持使用最新版本的 Selenium,请将 executeable_path 参数替换为 service 参数。service 参数接受一个 WebDriverService 对象,您可以使用它指定 chromedriver 的路径和其他配置选项,例如超时和日志级别。

代码示例:

from selenium import webdriver

# 使用 executeable_path(适用于 Selenium 4.9.0 或更低版本)
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# 使用 service(适用于 Selenium 4.10 或更高版本)
service = webdriver.chrome.service.Service('/path/to/chromedriver')
service.start()
driver = webdriver.Chrome(service=service)

探索更深:了解技术细节

executeable_path 参数被弃用的原因:

现在,WebDriver 使用 WebDriverManager 来管理 WebDriver 二进制文件。WebDriverManager 是一款第三方库,负责自动下载和安装 WebDriver 二进制文件,从而简化了流程。

service 参数的优势:

service 参数比 executeable_path 更灵活,因为它允许您:

  • 指定 WebDriver 二进制文件的路径
  • 配置超时和其他选项
  • 通过 Capabilities 对象提供其他选项

结语:保持编码之旅顺利

现在您已经掌握了修复“TypeError: WebDriver.init() got multiple values for argument ‘options‘”错误的知识,您就可以自信地继续您的编码之旅了。如果您遇到这个错误,请不要气馁,按照上面概述的步骤操作即可解决问题。

常见问题解答

  1. 我必须降级 Selenium 版本吗?

否,您不必降级 Selenium 版本。您可以使用 service 参数在最新版本中解决此问题。

  1. WebDriverManager 的目的是什么?

WebDriverManager 负责自动管理 WebDriver 二进制文件的下载和安装。

  1. service 参数有哪些其他配置选项?

service 参数允许您配置超时、日志级别和其他选项,例如调试模式。

  1. 为什么 executeable_path 参数被弃用?

executeable_path 参数被弃用,因为 WebDriverManager 提供了更简单、更自动化的方式来管理 WebDriver 二进制文件。

  1. 此错误只会在使用 chromedriver 时出现吗?

此错误不仅限于 chromedriver,它也可能发生在使用其他 WebDriver 驱动程序(例如 geckodriver)时。