python - Selenium 找不到链接元素
问题描述
我正在尝试使用 Selenium 单击此网站上的“登录”按钮:https ://results.decisiondeskhq.com/2020/primary/colorado/president 。我右键单击检查元素中的元素,复制 xpath,并将其放入 find_element_by_xpath 函数中。
这是我的代码:
from selenium import webdriver
driver = webdriver.Chrome(executable_path="/users/aliallam/Desktop/scraper test/chromedriver")
url = 'https://results.decisiondeskhq.com/2020/primary/colorado/president'
driver.get(url)
driver.find_element_by_xpath('//*[@id="content"]/div/div/div/div/button').click()
这是我收到的错误消息:
Traceback (most recent call last):
File "/Users/aliallam/Desktop/scraper test/sandbox2.py", line 7, in <module>
driver.find_element_by_xpath('//*[@id="content"]/div/div/div/div/button').click()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/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.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/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":"xpath","selector":"//*[@id="content"]/div/div/div/div/button"}
(Session info: chrome=80.0.3987.149)
先感谢您!
解决方案
元素有一个唯一的 id,所以你应该使用 id 而不是使用 xpath,你应该对元素应用显式等待,以便脚本等待元素存在,并且元素上方存在元素的 div您正在尝试单击,在这种情况下您需要使用 java 脚本单击。
你的代码应该是这样的:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(executable_path="/users/aliallam/Desktop/scraper test/chromedriver")
url = 'https://results.decisiondeskhq.com/2020/primary/colorado/president'
driver.get(url)
element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "login-text-btn")))
driver.execute_script("arguments[0].click();", element)
推荐阅读
- c - 如何检查输入的符号是否为char?
- java - 如何确定一个 int 是否是完美的正方形?
- java - O(n)中数组的查找模式
- java - 如何使用 JWebBrowser 禁用 PDF 打印选项
- google-apps-script - 设置公式时更新宏以使用工作表数据
- apache-kafka - Kafka 在崩溃后重新启动后如何识别组中的消费者
- python - YOLO 模型训练错误 - raise source.error(msg, len(this) + 1 + len(that)) sre_constants.error: bad character range 5-2 at position 72
- batch-file - 在不知道所述目录名称的情况下打开多个目录并使用 Windows 批处理文件删除其中的文件夹
- javascript - 我如何在javascript中访问reducer的累加器
- google-custom-search - 自定义搜索 API 未返回所有结果