弃用警告:executable_path 已被弃用 selenium python

Posted

技术标签:

【中文标题】弃用警告:executable_path 已被弃用 selenium python【英文标题】:DeprecationWarning: executable_path has been deprecated selenium python 【发布时间】:2022-01-23 23:26:34 【问题描述】:

我正在使用 sublime 编写 python 脚本。以下代码是python中的selenium使用webdriver_manager包自动安装驱动

# pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()

#s=Service(path)
#driver=webdriver.Chrome(service=s)
driver.get('https://www.google.com')
driver.find_element(By.NAME, 'q').send_keys('Yasser Khalil')

代码运行良好,但我收到了这样的警告

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

如何修复这样的错误?

【问题讨论】:

【参考方案1】:

我能猜出来

# pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

s=Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s)
driver.maximize_window()
driver.get('https://www.google.com')
driver.find_element(By.NAME, 'q').send_keys('Yasser Khalil')

【讨论】:

我收到了:driver = webdriver.Chrome(service=chrome_service, options=options) TypeError: __init__() got an unexpected keyword argument 'service' 这对你还有用吗? 不,它现在对我不起作用(我不知道为什么,我已经搜索过解决方案但没有找到) 原来我混合了两个独立的虚拟环境,一个安装了 3.x 版,另一个安装了 4.0 版。在版本 4./0 中它对我有用(但在服务中使用 executable_path,而不是 ChromeDriverManager().install() )【参考方案2】:

这对我有用

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
ser = Service("C:\\chromedriver.exe")
op = webdriver.ChromeOptions()
s = webdriver.Chrome(service=ser, options=op)

【讨论】:

【参考方案3】:

此错误消息...

DeprecationWarning: executable_path has been deprecated, please pass in a Service object

...暗示 key executable_path 将在即将发布的版本中弃用。

此更改与 Selenium 4.0 Beta 1 changelog 内联,其中提到:

在驱动程序实例化中弃用除 OptionsService 之外的所有参数。 (#9125,#9128)


解决方案

以selenium4 作为 executable_path 已弃用,您必须使用Service() 类的实例以及ChromeDriverManager().install() 命令,如下所述.

先决条件

确保:

Selenium 升级到 v4.0.0

pip3 install -U selenium

Webdriver Manager for Python 已安装

pip3 install webdriver_manager

您可以在ModuleNotFoundError: No module named 'webdriver_manager' error even after installing webdrivermanager中找到有关安装Webdriver Manager for Python的详细讨论

Selenium v​​4 兼容代码块

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

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

控制台输出:

[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 96.0.4664
[WDM] - Get LATEST driver version for 96.0.4664
[WDM] - Driver [C:\Users\Admin\.wdm\drivers\chromedriver\win32\96.0.4664.45\chromedriver.exe] found in cache

您可以在Selenium ChromeDriver issue using Webdriver Manager for Python中找到有关安装Webdriver Manager for Python的详细讨论


如果您想传递 Options() 对象,您可以使用:

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")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get("https://www.google.com")

TL;博士

您可以在以下位置找到相关的错误报告/拉取请求:

错误报告:deprecate all but Options and Service arguments in driver instantiation 拉取请求:deprecate all but Options and Service arguments in driver instantiation

【讨论】:

非常感谢。我已经尝试过了,但仍然得到TypeError: __init__() got an unexpected keyword argument 'service'。有什么想法吗? 你确定你做了pip3 install -U selenium 啊,我知道了,你做了pip install webdriver-manager,你需要pip install webdriver_manager 见ModuleNotFoundError: No module named 'webdriver_manager' error even after installing webdrivermanager 非常感谢。我使用了这条线pip3 install -U selenium,看来这解决了问题。 -U 是什么意思? 非常感谢。我想这个问题终于彻底解决了。最好的问候我的导师。【参考方案4】:

我发现这个弃用问题出现在 Selenium、Pip 和 Python 更新中。所以只需改变:

之前:

from selenium import webdriver
chrome_driver_path = 'C:/Users/Morteza/Documents/Dev/chromedriver.exe'
driver = webdriver.Chrome(executable_path=chrome_driver_path)

url = "https://www.google.com"
driver.get(url)

之后:

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

s=Service('C:/Users/Morteza/Documents/Dev/chromedriver.exe')
browser = webdriver.Chrome(service=s)
url='https://www.google.com'
browser.get(url)

【讨论】:

【参考方案5】:

如果您使用任何 IDE,例如 PyCharm,请安装该 IDE 的 webdriver-manager 包,作为 selenium 包的安装方法

【讨论】:

【参考方案6】:

Chrome 自动安装程序的最简单选项:

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

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

【讨论】:

【参考方案7】:

您可以创建一个 ChromeOptions 实例,该实例具有设置 ChromeDriver 特定功能的便捷方法。然后,您可以将 ChromeOptions 对象传递给 ChromeDriver 构造函数:

ChromeOptions options = new ChromeOptions();

options.addExtensions(new File("/path/to/extension.crx"));

ChromeDriver driver = new ChromeDriver(options);

从 Selenium 版本 3.6.0 开始,Java 中的 ChromeOptions 类也实现了 Capabilities 接口,允许您指定其他 WebDriver 功能,而不是特定于 ChromeDriver。

ChromeOptions options = new ChromeOptions();

// Add the WebDriver proxy capability.

Proxy proxy = new Proxy();

proxy.setHttpProxy("myhttpproxy:3337");

options.setCapability("proxy", proxy);

// Add a ChromeDriver-specific capability.

options.addExtensions(new File("/path/to/extension.crx"));

ChromeDriver driver = new ChromeDriver(options);

【讨论】:

以上是关于弃用警告:executable_path 已被弃用 selenium python的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 模式已被弃用

GLSL——texture1D 已被弃用,改用啥?

kubectl (node:7) [MONGODB DRIVER] 警告:当前的服务器发现和监控引擎已被弃用,将在未来版本中删除

Firebase 初始化“Node.js 8 已被弃用。” [复制]

ChromeDriver desired_capabilities 已被弃用,请传入带有 options kwarg 的 Options 对象

DeprecationWarning:监听 Db 类上的事件已被弃用,将在下一个主要版本中删除