【问题标题】:Selenium cannot find an elementSelenium 找不到元素
【发布时间】:2021-03-14 11:03:23
【问题描述】:

我正在尝试让 selenium 找到一个元素并单击它。

元素如下:

<button class="btn btn-link">search criteria: on support work 'took place on' (grouped by author), from: 2020-10-01, to: 2020-12-31</button>

单击此按钮时,会在同一 URL 中打开一个表单,允许我输入时间上限和下限。目标是让 Selenium 填写表格并点击“更新”。

我尝试了几种不同的方法('find_element_by_xpath'、'...by_class_name'、'WebDriverWait' 等,但 selenium 无法识别按钮元素。我都尝试跳过这一步并尝试填写直接表单(因为它都在同一个 URL 下,但没有运气。

我是一个初学者,所以解决方案可能非常基本。我只是不知道它是什么。

【问题讨论】:

  • 请检查您的按钮是否存在于 iframe 下?如果可能的话分享你的网址?

标签: html selenium xpath webdriverwait partiallinktext


【解决方案1】:

试试:driver.findElement(By.cssSelector('btn.btn-link'))。

【讨论】:

  • 这似乎不起作用,我刚刚得到这个NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"btn.btn-link"}
  • 顺便说一下,我是这样解释你写的:driver.find_element_by_css_selector('btn.btn-link')
  • find_element_by_class_name 只接受一个类,所以这对你不起作用。也许您尝试使用以下方法查找? driver.find_elements_by_css_selector("button[class='btn btn-link']")
【解决方案2】:

如果您无法找到它,也不是通过显式等待,您可能需要使用 pyautogui 选择按钮的位置,然后将鼠标移到那里并单击。如果您需要向下滚动以使其可见,请确保您实现了滚动脚本

【讨论】:

  • 感谢您的回复,对我来说问题是这个.exe 必须能够在后台运行,并且不能通过接管鼠标来中断用户的工作流程。您还想了解更多信息以使问题更清楚吗?
  • 你可以添加网址,也许有帮助,也许没有
【解决方案3】:

点击以文本为搜索条件的元素:支持工作“发生于”(按作者分组),从:2020-10-01,到:2020-12-31您可以使用以下任一Locator Strategies:

  • 使用partial_link_text:

    driver.find_element_by_partial_link_text("search criteria: on support work").click()
    
  • 使用xpath:

    driver.find_element_by_xpath("//button[@class='btn btn-link' and starts-with(., 'search criteria: on support work')]").click()
    

理想情况下,点击您需要为WebDriverWait 诱导element_to_be_clickable() 的元素,您可以使用以下任一Locator Strategies:

  • 使用PARTIAL_LINK_TEXT:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "search criteria: on support work"))).click()
    
  • 使用XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-link' and starts-with(., 'search criteria: on support work')]"))).click()
    
  • 注意:您必须添加以下导入:

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

【讨论】:

    【解决方案4】:

    检查元素是否在带有 iframe 标签的父元素内:

    如果是,那么您必须首先切换到该 iframe:

    使用xpath找到iframe webelement,然后切换到它,然后点击按钮

    iframe = driver.find_element_by_xpath("//iframe[@id='something']")
    driver.switch_to.frame(iframe)
    
    //do your code
    // then switch back to main frame
    driver.switch_to.default_content()
    

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 1970-01-01
      • 2021-12-17
      • 2018-11-07
      • 2021-12-30
      相关资源
      最近更新 更多