【问题标题】:receiving error message "no such element: Unable to locate element" when trying to find an element with xpath尝试使用 xpath 查找元素时收到错误消息“没有这样的元素:无法找到元素”
【发布时间】:2019-09-11 10:40:10
【问题描述】:

提供商不允许使用连接器访问托管的 MariaDB。因此,我尝试使用带有 Selenium 的 Python 脚本导出一些表。我无法找到/单击 phpMyAdmin 的导出按钮。

我尝试使用通过 Chrome 浏览器获得的 XPATH 来定位按钮。 我将 Chrome、驱动程序、Selenium 更新到了最新版本。试图让驱动程序等待:

(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='navigationbar']/ul[@id='topmenu']//li//img[@title='Exporteren']"))).click())

问题是由于某种原因,驱动程序找不到该按钮。 我尝试按 xpath、class、css 搜索……但没有成功。 我在 html 代码中找不到任何框架。 下面是一些 html 代码(这似乎在问题中得到了解释......)

HTML:

    <div class="navigationbar"><ul id="topmenu"  class="resizable-menu">
    <li>
            <a href="server_status.php" class="tab">
            <img src="themes/dot.gif" title="Status" alt="Status" class="icon ic_s_status" />&nbsp;Status
            </a>
        </li>
    <li>
            <a href="server_export.php" class="tab">
            <img src="themes/dot.gif" title="Exporteren" alt="Exporteren" class="icon ic_b_export" />&nbsp;Exporteren
            </a>
        </li>
    <li>

代码试验:

python
    btnexp = driver.find_element_by_xpath("//*[@id='topmenu']/li[4]/a/img")
    btnexp.click()

错误信息:

no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='topmenu']/li[4]/a/img"}

【问题讨论】:

    标签: python selenium-webdriver xpath window handle


    【解决方案1】:

    激活最近的窗口:driver.switch_to_window(driver.window_handles[-1])

    【讨论】:

      【解决方案2】:

      要在文本为 Exporteren 的元素上使用 click(),您必须为 element_to_be_clickable() 诱导 WebDriverWait,您可以使用以下任一 Locator Strategies

      【讨论】:

      • 我尝试了 XPATH 变体并得到了 TimeoutException
      • 与 css 选择器相同
      • 由于某种原因,似乎找不到带有文本“Exporteren”的元素。
      • @RobertDL 查看我在no such element: Unable to locate element的答案中添加的参考讨论
      • 我将 Selenium 和驱动程序都更新到了最新版本。恐怕没有任何区别。
      【解决方案3】:

      您是否尝试过按类名定位元素?

      content = driver.find_element_by_class_name('icon ic_s_status')
      content = driver.find_element_by_class_name('icon ic_b_export')
      

      【讨论】:

      • 是的,但无济于事:
      • 我得到一个 NoSuchElementException
      • 该元素是否可能包含在某种容器中,因此我必须先处理更高级别的元素?使用框架时很常见,但可能还有其他具有类似操作的构造。
      • 这些都不起作用,因为find_element_by_class_name() 需要一个类名,而您已经传入了两个类名(它们之间有空格)。这将引发错误。您可以将它们更改为像 .icon.ic_s_status 这样的 CSS 选择器,它应该可以工作。
      猜你喜欢
      • 2019-06-08
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多