Python Selenium - 没有找到这样的元素......我迷路了

Posted

技术标签:

【中文标题】Python Selenium - 没有找到这样的元素......我迷路了【英文标题】:Python Selenium - No Such Element Found... I'm Lost 【发布时间】:2021-09-02 16:08:40 【问题描述】:

我正在尝试单击应该将我转到下一页的元素,但是,我似乎无法正确找到它,甚至找不到页面上的任何项目。

元素的 html 代码

<a data-qa="menu-button" 
class="HeaderMenu__HeaderItemButton-kr6p0e-0 hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0 imLDTG" 
data-cv-test="headerSearchLink" 
href="/cars" 
target="_self">Search Cars
</a>

Visual of what I'm trying to click on

我的代码不起作用(我有正确的导入语句)

PATH = "my_path_to_chromedriver"
driver = webdriver.Chrome(PATH)
driver.get("https://www.carvana.com")
link = driver.find_element_by_class_name('HeaderMenu__HeaderItemButton-kr6p0e-0 hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0 imLDTG')
link.click()

我曾尝试使用这种方法按类名搜索,但只收到此错误消息

link = driver.find_element_by_class_name('HeaderMenu__HeaderItemButton-kr6p0e-0 hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0 imLDTG')
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 564, in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element
return self.execute(Command.FIND_ELEMENT, 
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: "method":"css selector","selector":".HeaderMenu__HeaderItemButton-kr6p0e-0 hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0 imLDTG"
(Session info: chrome=xx.x.xxxx.xxx)

我也尝试过通过 CSS 选择器进行搜索。我什至做了一点完整性检查,并在网站上搜索了第一行 html 代码,出于某种原因,它给了我同样的错误。有什么帮助...谢谢!

【问题讨论】:

当类属性中有空格时,表示有多个。采用 。像这样的操作符: link = driver.find_element_by_class_name('.HeaderMenu__HeaderItemButton-kr6p0e-0.hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0.imLDTG') (用“.”替换空格)也可以将“data-qa”属性定位为 xpath // a[@data-qa="menu-button"] w3schools.com/cs-s-ref/sel_class.asp 您是否检查了您尝试访问的元素是否在框架内? @pcalkins xpath 目标 data-cv-test 有效。感谢您的建议。但是,类名搜索仍然给了我同样的错误。从这里开始,我将只使用 xpath。 只是让你知道,你用来识别元素的类名返回 3 个元素。所以一定要确保写一个唯一的定位器 谢谢,您使用哪一行代码来访问这些元素。出于某种原因,我的任何人都没有使用该类名。 @itronic1990 【参考方案1】:

问题是你的类名中有空格。类名函数对此不起作用,我建议尝试

driver.find_element_by_css_selector('.HeaderMenu__HeaderItemButton-kr6p0e-0.hbeYmr.MenuButton__MenuButtonWrapper-dq0g44-0.imLDTG')

【讨论】:

完美,这行得通...您是否有理由使用 css 选择器与类名进行搜索? 所有功能driver.find_element_by_class_name(name) 甚至我认为,就是在name 前面加上一个点并运行driver.find_element_by_css_selector('.' + name)。这在您的情况下不起作用,因为类名中的空格在 css 选择器中没有正确解释,您必须使用上面的一个。【参考方案2】:

driver.find_element_by_class_name('HeaderMenu__HeaderItemButton-kr6p0e-0 hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0 imLDTG')

此代码返回一个节点列表,您无法单击它,您可以尝试获取第一个元素,所以这里是代码:

driver.find_element_by_class_name('HeaderMenu__HeaderItemButton-kr6p0e-0 hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0 imLDTG')[0]

或者再见,在导航器的控制台中使用这样的 js:

document.getElementByNames('HeaderMenu__HeaderItemButton-kr6p0e-0 hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0 imLDTG')[0]

【讨论】:

谢谢。出于某种原因,当我运行同一行代码并尝试打印它时,当它尝试访问该元素时出现错误。我使用的是旧版本的 selenium 吗? 我不这么认为,你可以这样做,wd.execute_script('return document.getElementByNames("HeaderMenu__HeaderItemButton-kr6p0e-0 hbeYmr MenuButton__MenuButtonWrapper-dq0g44-0 imLDTG")[0])' )

以上是关于Python Selenium - 没有找到这样的元素......我迷路了的主要内容,如果未能解决你的问题,请参考以下文章

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:尝试使用 selenium 单击下一步按钮时无法找到元素

Python Selenium 无法定位元素

python selenium判断元素是否存在的问题

python selenium判断元素是否存在的问题

找到 reCAPTCHA 元素并点击它——Python + Selenium

Selenium Python - 处理没有这样的元素异常