DeprecationWarning:executable_path 已被弃用 selenium python

Yas*_*lil 201 python selenium

我正在使用 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')
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但我收到了这样的警告

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

如何修复这样的错误?

Deb*_*anB 265

这个错误信息...

DeprecationWarning: executable_path has been deprecated, please pass in a Service object
Run Code Online (Sandbox Code Playgroud)

...意味着该密钥 executable_path将在即将发布的版本中被弃用。

此更改与Selenium 4.0 Beta 1 更改日志一致,其中提到:

弃用驱动程序实例化中的所有 butOptionsService参数。(#9125,#9128)


解决方案

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

先决条件

确保这件事:

您可以在ModuleNotFoundError: No module named 'webdriver_manager' 错误(即使在安装 webdrivermanager 后)中找到有关为 Python安装 Webdriver Manager 的详细讨论

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")
Run Code Online (Sandbox Code Playgroud)

控制台输出:

[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
Run Code Online (Sandbox Code Playgroud)

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


如果您想传递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")
Run Code Online (Sandbox Code Playgroud)

TL; DR

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


小智 104

这对我有用

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(r"C:\chromedriver.exe")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
Run Code Online (Sandbox Code Playgroud)

扩展已接受的答案,Service 类允许以与之前使用executable_path 参数相同的方式显式指定 ChromeDriver 可执行文件。通过这种方式,可以轻松迁移现有代码(显然您需要用C:\chromedriver.exe您的路径替换上面的代码)。

  • 喜欢这个答案!无需安装额外的软件包! (4认同)
  • 这对我有用。接受的答案没有。 (3认同)

Yas*_*lil 71

我能弄清楚

# 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')
Run Code Online (Sandbox Code Playgroud)

  • 我收到: `driver = webdriver.Chrome(service=chrome_service, options=options)` `TypeError: __init__() got an Unexpected keywords argument 'service'` 这对您仍然有效吗? (4认同)
  • 事实证明,我混合了两个独立的虚拟环境,一个安装了 3.x 版本,另一个安装了 4.0 版本。在版本 4./0 中,它确实对我有用(但在服务中使用executable_path,而不是 ChromeDriverManager().install() ) (2认同)

Mor*_*ori 58

2023 年 11 月更新

对于 Chrome 版本 119.0.6045.124(官方版本)(64 位)或更高版本,没有像以前那样的任何WebDriver。所以只需添加这些代码:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
Run Code Online (Sandbox Code Playgroud)

我发现这个弃用问题出现在 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)
Run Code Online (Sandbox Code Playgroud)

后:

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)
Run Code Online (Sandbox Code Playgroud)


Sne*_*gsu 19

以上答案均针对Chrome,添加针对Firefox的答案

安装:

pip install webdriver-manager
Run Code Online (Sandbox Code Playgroud)

代码:

from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(service=Service(executable_path=GeckoDriverManager().install()))
Run Code Online (Sandbox Code Playgroud)

参考: https: //github.com/SergeyPirogov/webdriver_manager/issues/262#issuecomment-955197860


小智 8

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service_obj = Service("WebDrivers_path\chromedriver.exe")
driver = webdriver.Chrome(service=service_obj)
driver.get("https://www.google.com")
Run Code Online (Sandbox Code Playgroud)


小智 5

在这里查看 Service 对象中的新定义。

我的解决方案

from selenium.webdriver.chrome.service import Service

chrome_executable = Service(executable_path='chromedriver.exe', log_path='NUL')
driver = webdriver.Chrome(service=chrome_executable)
Run Code Online (Sandbox Code Playgroud)