selenium - NoSuchElementException:消息:没有这样的元素:无法使用 Selenium 和 Python 找到单击 span 元素的元素
问题描述
我正在尝试单击位于 div 类中的 span 类。这是HTML:
<div class="modal-content scrollbar">
<div class="block block-always-show action-black-box waves-effect">
<div class="icon xray-icon"></div>
<span class="txt">Xray - Test Product Research</span>
</div>
仍在学习 Selenium,但这是我尝试过的:
driver.find_element_by_xpath("//span[contains(@class, txt) and contains(text()='Xray - Test Product Research')]").click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Xray - Test Product Research']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='txt' and contains(.,'Xray - Test Product Research')]"))).click()
我收到这些错误:
NoSuchElementException: Message: no such element: Unable to locate element:
和
TimeoutException: Message:
在此先感谢并感谢有关解决方案的任何帮助。
解决方案
要单击文本为Xray - Test Product Research的元素,您必须诱导WebDriverWait并且element_to_be_clickable()
您可以使用以下任一定位器策略:
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.modal-content.scrollbar span.txt"))).click()
使用
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='modal-content scrollbar']//span[@class='txt' and contains(., 'Xray - Test Product Research')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
参考
您可以在以下位置找到一些关于NoSuchElementException的相关讨论:
推荐阅读
- druid - How add new column in to existing druid schema?
- linux - removing first n and last n lines from multiple text files
- c# - Xamarin Forms NFC UWP SubscribeForMessage Problem
- amazon-web-services - Running a shell script in CloudFormation cfn-init
- author - 如何缩短bibtex中的组名,以便文本中只出现缩写
- ruby - Kernel.pp 在 Ruby 中引发 NoMethodError
- swift - 如何从 Swift 中的时间间隔中减去 30 分钟?
- python - Drag and drop files in Tkinter GUI
- php - MySQL: Unknown column 'price_USD' in 'field list' - Update operation - correct query (it runs on phpMyAdmin)
- java - 使用 java8 更改列表中的值