find_element_by_* 命令在 Selenium 中已弃用

Ale*_*ndr 92 python selenium webdriver selenium-webdriver findelement

启动功能时

def run(driver_path):
    driver = webdriver.Chrome(executable_path=driver_path)
    driver.get('https://tproger.ru/quiz/real-programmer/')
    button = driver.find_element_by_class_name("quiz_button")
    button.click()
run(driver_path)
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

def run(driver_path):
    driver = webdriver.Chrome(executable_path=driver_path)
    driver.get('https://tproger.ru/quiz/real-programmer/')
    button = driver.find_element_by_class_name("quiz_button")
    button.click()
run(driver_path)
Run Code Online (Sandbox Code Playgroud)

...但我不明白为什么。

我正在为我的 Chrome 版本使用最新版本的WebDriver 。我不知道为什么我得到

<ipython-input-27-c5a7960e105f>:6: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(executable_path=driver_path)
<ipython-input-27-c5a7960e105f>:10: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  button = driver.find_element_by_class_name("quiz_button")
Run Code Online (Sandbox Code Playgroud)

...当文档中存在该命令时。

Deb*_*anB 203

这个错误信息...

DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
Run Code Online (Sandbox Code Playgroud)

...意味着这些find_element_by_*命令在最新的 Selenium Python 库中已被弃用。

正如AutomatedTester 提到的:这个DeprecationWarning反映了关于简化跨语言 API 的决定所做的更改,并且做到了这一点。


解决方案

相反,你必须使用find_element(). 举个例子:

您必须包含以下导入内容

from selenium.webdriver.common.by import By
Run Code Online (Sandbox Code Playgroud)

除此之外,您还必须更改以下内容:

注意:如果您要通过搜索和替换来实现上述更改,则需要对 执行相同的操作find_elements_*,即 的复数形式find_element_*

您可能还会发现此升级指南很有用,因为它涵盖了升级时可能需要进行的一些其他不相关的更改:升级到 Selenium 4

  • 从 selenium.webdriver.common.by 导入 (11认同)
  • NameError:名称“By”未定义 (4认同)

Mor*_*ori 10

@DebanjanB 提到并解释了新结构。另外,最好使用这些行:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service

s = Service('C:/Users/.../chromedriver.exe')
driver = webdriver.Chrome(service=s)
Run Code Online (Sandbox Code Playgroud)