【问题标题】:Message: no such element: Unable to locate element error finding an element using Xpath Selenium and Python消息:没有这样的元素:使用 Xpath Selenium 和 Python 查找元素时无法定位元素错误
【发布时间】:2020-07-03 18:55:25
【问题描述】:

这是我尝试点击的使用 Selenium 的自动化程序的元素:

<input id="btnNextWeek" title="Next Week" onclick="if (this.className != 'mybtndis2') { moveweek(7) }" type="button" value=">>" name="btnNextWeek" class="mybtn2" style="-webkit-appearance: button; padding-left: 8px; padding-right: 8px; height: auto">

收到此错误:

Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@title="Next Week"]"} (Session info: chrome=83.0.4103.116)

这是给出错误的代码:

self.driver.find_element_by_xpath("//input[@title=\"Next Week\"]")\
.click()

有什么建议吗?

【问题讨论】:

  • 考虑对元素和响应使用代码围栏。这将使您的问题更具可读性。这可以通过选择文本并单击编辑器顶部的相关按钮轻松完成。

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

使用这个 - driver.find_element_by_xpath('//input[@title="Next Week"]').click()

这会起作用。如果你在使用双引号之前使用单引号来摆脱转义,我们不需要转义 .在 click() 之前,因为这里 .用于调用方法。

谢谢。

【讨论】:

  • 这不起作用,但感谢您提供有关单引号的提示!
【解决方案2】:

所需元素是启用了JavaScript 的元素,因此要单击该元素,您必须为WebDriverWait 诱导element_to_be_clickable(),您可以使用以下Locator Strategies 之一:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.mybtn2#btnNextWeek[title='Next Week'][name='btnNextWeek']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='mybtn2' and @id='btnNextWeek'][@title='Next Week' and @name='btnNextWeek']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

参考文献

您可以在以下位置找到关于没有此类元素的几个相关讨论:

【讨论】:

  • 由于某种原因无法正常工作。只是在 20 秒后超时。感谢您尝试提供帮助!
【解决方案3】:

这可能是因为它位于 iframe 内而无法找到该元素...如果是这样,那么您可以使用

frame = driver.find_element_by_xpath('insert frame xpath')
driver.switch_to.frame(frame)
driver.find_element_by_xpath('//input[@title="Next Week"]').click()
driver.switch_to.default_content()

【讨论】:

    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    相关资源
    最近更新 更多