不同版本的 Selenium 和 WebDriver 的 API 兼容性问题

devtools/2024/10/18 14:21:37/

TypeError: __init__() got an unexpected keyword argument 'executable_path' 是一个常见的错误,通常出现在使用 Selenium 自动化测试工具时。此错误通常是由于不同版本的 Selenium 和 WebDriver 的 API 变化引起的。以下是此问题的详细分析及解决方法。

问题分析

Selenium 是一个用于浏览器自动化的工具,它通过 WebDriver 来控制浏览器。随着 Selenium 的更新,某些参数的使用方式会发生变化。例如,在 Selenium 3 及更早版本中,webdriver.Chrome()__init__ 方法可以接受 executable_path 参数,用于指定 ChromeDriver 的路径。然而,在 Selenium 4 中,webdriver.Chrome() 的初始化方法不再接受 executable_path 参数,而是使用 webdriver.Chrome(service=Service('path_to_driver')) 的方式来指定驱动路径。

因此,当你在 Selenium 4 中仍然使用 executable_path 参数时,就会触发 TypeError: __init__() got an unexpected keyword argument 'executable_path' 错误。

解决方案

要解决这个问题,需要根据所使用的 Selenium 版本来调整代码。以下提供几种不同情况下的解决方案。

方案 1:针对 Selenium 4 的解决方案

Selenium 4 引入了 Service 类来管理浏览器驱动,因此你需要使用 Service 类来传递驱动路径:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service# 使用 Service 类指定驱动路径
service = Service(executable_path='path_to_chromedriver')
driver = webdriver.Chrome(service=service)

在上述代码中,我们通过 Service 实例化了一个对象 service,然后将其作为参数传递给 webdriver.Chrome()service 参数。这样就可以避免 executable_path 的错误。

方案 2:将 Selenium 降级到 3.x 版本

如果你不想修改现有代码,可以将 Selenium 降级到 3.x 版本,这样可以继续使用 executable_path 参数:

  1. 卸载当前的 Selenium:
    pip uninstall selenium
    
  2. 安装 Selenium 3.x 版本:
    pip install selenium==3.141.0
    

安装完成后,你可以继续使用如下代码:

from selenium import webdriver# 继续使用 executable_path 参数
driver = webdriver.Chrome(executable_path='path_to_chromedriver')

此时不会再出现 TypeError 错误。

方案 3:使用 Options 类和 Service

如果你在使用 Options 类来配置浏览器启动选项时,可以结合 OptionsService 类一起使用:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options# 创建 ChromeOptions 实例
options = Options()
options.add_argument('--headless')  # 无头模式启动# 创建 Service 实例并指定 ChromeDriver 路径
service = Service(executable_path='path_to_chromedriver')# 将 service 和 options 传递给 Chrome
driver = webdriver.Chrome(service=service, options=options)

在这个方案中,我们不仅传递了驱动路径,还传递了浏览器启动选项,适合复杂的自动化测试场景。

总结

要解决 TypeError: __init__() got an unexpected keyword argument 'executable_path' 错误,关键在于理解 Selenium 版本的变化:

  • 如果使用 Selenium 4,请使用 Service 类来指定驱动路径。
  • 如果希望继续使用 executable_path 参数,可以将 Selenium 降级到 3.x 版本。
  • 如果在使用浏览器启动选项,请结合 ServiceOptions 类一起使用。

通过上述方案,可以有效解决此类错误并保证代码的兼容性。


http://www.ppmy.cn/devtools/120991.html

相关文章

pyhton语法 正则表达式

pyhton语法 正则表达式 1.正则表达式介绍1.1 正则表达式入门1.2 正则替换 2.正则效验2.1正则-校验单个字符2.2正则-校验多个字符2.3 正则-校验开头和结尾2.4 正则-校验分组2.5 正则校验邮箱2.6正则获取分组后的数据2.7 引用指定组的内容 总结 1.正则表达式介绍 1.1 正则表达式…

05_图片剪切

import cv2 img cv2.imread(libarary.JPG, 1)dst img[350:650,550:800] #这里选取矩形区域X:550-800 Y:350-650#cv2.imshow(image,dst) #cv2.waitKey(0)以下会在jupyterLab控件中显示两种压缩后的图像对比显示 #bgr8转jpeg格式 import enum import …

C++-vector模拟实现

###vector底层相当于是数组,查看源码可以发现,这个类的私有成员变量是三个迭代器;在实现时迭代器就可以当作是vector里面的元素的指针类型; ###vector是一个类模板,实现时也应当按照这样的写法用一个模板去实现&#…

【刷点笔试面试题试试水】#ifndef和#ifdef有什么区别?

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> using namespace std;#define DEBUGint…

算法打卡:第十一章 图论part10

今日收获&#xff1a;Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09;&#xff0c;bellman_ford之判断负权回路和单源有限最短路 1. Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; 题目链接&#xff1a;94. 城市间货物运输 I (kamacoder.com) 思路…

ArcGIS与ArcGIS Pro去除在线地图服务名单

我们之前给大家分享了很多在线地图集&#xff0c;有些地图集会带有制作者信息&#xff0c;在布局制图的时候会带上信息影响出图美观。 一套GIS图源集搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图 比如ArcGIS&#xff1a; 比如ArcGIS Pro&#xff1a…

每日一题学习笔记

编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&#xff1a;s ["h","e…

微服务实战——平台属性

平台属性 中间表复杂业务 /*** 获取分类规格参数&#xff08;模糊查询&#xff09;** param params* param catelogId* param type type"base"时查询基础属性&#xff0c;type"sale"时查询销售属性* return*/ Override public PageUtils listByCatelogId…