python - python selenium中的NoSuchElementException(事件)
问题描述
当我尝试单击图像中突出显示的事件选项卡时,它给了我一个错误。下面是脚本。
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://*****.service-now.com/")
driver.switch_to.frame('gsft_main')
driver.find_element_by_id('user_name').send_keys('*****')
driver.find_element_by_id('user_password').send_keys('*****')
driver.find_element_by_id('sysverb_login').click()
Incident=driver.find_element_by_link_text('Incident')
这是我在检查页面后复制时得到的元素
<span>Incident</span>
这是 xpath
//*[@id="concourse_application_dead1309c611228701e2bda7b4252474"]/a/span
两者都尝试了,但都没有成功。给我以下错误。`
Traceback (most recent call last):
File "Test1.py", line 10, in <module>
Incident=driver.find_element_by_link_text('Incident')
File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 428, in find_element_by_link_text
return self.find_element(by=By.LINK_TEXT, value=link_text)
File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element 'value': value})['value']
File "C:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python37\lib\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":"link text","selector":"Incident"}
解决方案
文本为Incident的元素实际上在一个<span>
节点内。尽管它位于父<a>
节点内,但您将无法使用find_element_by_link_text()
或find_element_by_partial_link_text()
定位该元素。
但是,由于所需的元素是动态元素,因此要定位并click()
在元素上您必须诱导WebDriverWait并且element_to_be_clickable()
您可以使用以下任一 定位器策略:
使用
CSS_SELECTOR
:incident = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[id^='concourse_application_dead']>a>span")))
使用
XPATH
A:incident = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Incident']")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
参考
您可以在以下位置找到详细的相关讨论:
推荐阅读
- ubuntu - 从远程将命令注入正在运行的 Minecraft 服务器
- macos - 使用 FileWrapper 创建自定义文档类型
- sublimetext3 - Sublime Text 将行号分配给变量?
- python - 如何在python中重命名sqlite列?
- amazon-web-services - UTF-16LE能不能转成MySQL LOAD DATA INFILE类型格式而不乱码中文等语言?如果有怎么办?
- javascript - 我可以在我的代码中更改什么来提取第一个数字?
- python - 使用 Django 发送电子邮件以联系
- c++ - 在 C++ 中的写入系统调用中发送动态数组的问题
- mysql - 使用多个 IN 子句查询多对多关系
- javascript - 如何将表格分成两部分以需要不同的输入