首页 > 解决方案 > 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: 

在此先感谢并感谢有关解决方案的任何帮助。

标签: seleniumselenium-webdriverxpathcss-selectorswebdriverwait

解决方案


要单击文本为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的相关讨论:


推荐阅读