Selenium - Python - AttributeError:"WebDriver"对象没有属性"find_element_by_name"



我正试图让Selenium与Chrome一起工作,但我一直遇到这个错误消息(和其他类似的消息):

AttributeError:"WebDriver"对象没有属性"find_element_by_name">

同样的问题出现在find_element_by_id(),find_element_by_class()

我也不能打电话给send_keys()

我只是运行测试代码提供在ChromeDriver - WebDriver for Chrome - Getting started

import time
from selenium import webdriver
driver = webdriver.Chrome("C:/Program Files/Chrome Driver/chromedriver.exe")  # Path to where I installed the web driver
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()

我使用的是Google Chrome版本103.0.5060.53,从Downloads下载了ChromeDriver 103.0.5060.53 .

运行代码时,Chrome打开并导航到google.com,但它收到以下输出:

C:UsersAdminProgramming ProjectsPython ProjectsClock Inclock_in.py:21: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome("C:/Program Files/Chrome Driver/chromedriver.exe")  # Optional argument, if not specified will search path.
DevTools listening on ws://127.0.0.1:58397/devtools/browser/edee940d-61e0-4cc3-89e1-2aa08ab16432
[9556:21748:0627/083741.135:ERROR:device_event_log_impl.cc(214)] [08:37:41.131] USB: usb_service_win.cc:415 Could not read device interface GUIDs: The system cannot find the file specified. (0x2)
[9556:21748:0627/083741.149:ERROR:device_event_log_impl.cc(214)] [08:37:41.148] USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[9556:21748:0627/083741.156:ERROR:device_event_log_impl.cc(214)] [08:37:41.155] USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[9556:21748:0627/083741.157:ERROR:device_event_log_impl.cc(214)] [08:37:41.156] USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[9556:21748:0627/083741.157:ERROR:device_event_log_impl.cc(214)] [08:37:41.156] USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
Traceback (most recent call last):
File "C:[REDACTED]", line 27, in <module>
search_box = driver.find_element_by_name('q')
AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'
[21324:19948:0627/083937.892:ERROR:gpu_init.cc(486)] Passthrough is not supported, GL is disabled, ANGLE is

注意:我替换了这篇文章的文件路径

我不认为DevTools监听部分与这个问题有关,但我想我应该包括它,以防万一。

Selenium刚刚在4.3.0版本中删除了该方法。查看变更:https://github.com/SeleniumHQ/selenium/blob/a4995e2c096239b42c373f26498a6c9bb4f2b3e7/py/CHANGES

Selenium 4.3.0
* Deprecated find_element_by_* and find_elements_by_* are now removed (#10712)
* Deprecated Opera support has been removed (#10630)
* Fully upgraded from python 2x to 3.7 syntax and features (#10647)
* Added a devtools version fallback mechanism to look for an older version when mismatch occurs (#10749)
* Better support for co-operative multi inheritance by utilising super() throughout
* Improved type hints throughout

你现在需要使用:

driver.find_element("name", "q")

在您的示例中,它将变成:

search_box = driver.find_element("name", "q")
search_box.send_keys('ChromeDriver')
search_box.submit()

为了提高可靠性,您应该考虑将WebDriverWaitelement_to_be_clickable结合使用。

您需要使用以下代码导入Selenium WebDriver:

from selenium.webdriver.common.by import By

接下来使用这个API:

find_element_by_name(' name ')的名字,"名字")find_element_by_xpath(' xpath ')XPATH, XPATH)

find_element_by_*和find_elements_by_*已弃用。你可以使用find_element()

首先要导入:

from selenium.webdriver.common.by import By

可以和:

一起使用
driver.find_element(By.XPATH, " ")
driver.find_elements(By.XPATH, " ")
driver.find_element(By.CLASS_NAME, " ")
driver.find_elements(By.CLASS_NAME, " ")

等。查看find_element() API的所有用法

感谢michael-mintz和federikowsky为我们提供了根本原因的线索。

在我的例子中,我无法编辑代码以与最新的Selenium版本兼容。所以,作为一种变通办法,我把我的Selenium降级到4.2.0。

对于Python 3:

  1. 确保您的Selenium是4.3.0或更高。启动Python交互式会话并运行:

    >>> import selenium
    >>> selenium.__version__
    
  2. 降级Selenium

  • 编辑依赖项文件(requirements.txt)),并提到一个特定的版本:

    selenium==4.2.0
    
  • 或者,如果你不能改变依赖文件(requirements.txt),运行这些命令:

    pip3 install -r requirements.txt
    pip3 uninstall selenium
    pip3 install selenium==4.2.0
    

最新更新