弃用警告: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 内联,其中提到:
在驱动程序实例化中弃用除
Options
和Service
之外的所有参数。 (#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 v4 兼容代码块
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的主要内容,如果未能解决你的问题,请参考以下文章
kubectl (node:7) [MONGODB DRIVER] 警告:当前的服务器发现和监控引擎已被弃用,将在未来版本中删除
Firebase 初始化“Node.js 8 已被弃用。” [复制]
ChromeDriver desired_capabilities 已被弃用,请传入带有 options kwarg 的 Options 对象