【问题标题】:Using python selenium to click an element not visible使用 python selenium 单击不可见的元素
【发布时间】:2015-08-17 08:39:02
【问题描述】:

我在浏览器上使用 python selenium 来填写一些表格。我试图在下拉列表中选择一个元素,

<a href="#" class="dropdown-toggle select" data-toggle="dropdown">0</a>

但如果我尝试使用此脚本通过文本找到它:

browser.find_element_by_link_text("0").click()

它会导致错误: “未知错误:元素在点 (498, 612) 处不可点击。其他元素将收到点击:...”

如果尝试通过类名找到它:

browser.find_element_by_class_name("dropdown-toggle").click()

导致另一个错误:“元素不可见”

有什么方法可以点击该下拉列表吗?非常感谢。

【问题讨论】:

  • 第一次加载该链接时页面上是否可见?您可能需要先单击其他元素才能看到它
  • 你能提供更多的下拉列表的 HTML 吗?因为&lt;a href..&gt; 通常只是一个链接而没有下拉菜单?你有一些
      标签吗?也许您必须先打开下拉列表,然后再选择一个值
  • 在页面上可见但是按钮上方有一个元素遮挡,html很简单如下:&lt;div class="tckt"&gt;&lt;label&gt;How many tickets would you like?&lt;/label&gt; &lt;a href="#" class="dropdown-toggle select" data-toggle="dropdown"&gt;0&lt;/a&gt;&lt;/div&gt;,就是
    遮挡了下拉菜单并使其不可点击
  • 感谢所有回复,尝试了所有方法但仍然没有运气...我已将 html 代码粘贴到此处:pastebin.com/n6VLQDgA 请帮助查看如何单击下拉列表:0
  • 我想我知道问题出在哪里,那部分代码是在我单击网站中的某个按钮后通过 javascript 创建的,也许这就是它在 Selenium 意义上“不可见”的原因?无论如何我可以克服这个问题吗?

标签: python selenium


【解决方案1】:

尝试通过Xpath同时搜索部分类和文本来找到它:

browser.find_element_by_xpath(//a[contains(@class, 'dropdown-toggle select') and contains(text(), '0')]).click();

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。您可以在找到该元素后执行脚本来更改该元素的可见性,然后单击它。

    driver.execute_script("arguments[0].style.visibility = 'visible';",myElement) myElement.click()

    【讨论】:

      【解决方案3】:

      感谢您的反馈,我发现问题是由于某些点击触发了 javascript 加载的新脚本。我创建了以下代码来捕获异常并重试直到元素准备好:

      while True:
          try:
              time.sleep(1)
              browser.find_element_by_xpath("//div[@class='tckt']/a").click()
              print("found")
              break
          except ElementNotVisibleException:
              print("notvisible")
          except WebDriverException:
              print("clickduplicate")
      

      我在文章上读到它说这在 Chrome webdriver 的单选按钮上发生了很多,希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        你应该通过 xpath 获取元素,然后按下它。

        browser.find_element_by_xpath(xpath)。

        在此处阅读如何获取 xpath:http://www.wikihow.com/Find-XPath-Using-Firebug

        【讨论】:

        • 我做到了,但它仍然导致相同的错误“元素不可见”。我也尝试过ActionChain,但仍然无法点击它
        • 虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
        【解决方案5】:

        首先通过找到它来单击父元素,使用它的xpath->在父元素中找到要单击的元素,就像你做的那样。即

        browser.find_element_by_link_text("0").click()
        

        希望这 2 个步骤对您有用。否则,请使用您尝试过的代码发布网址 - 很容易找出问题。

        【讨论】:

          猜你喜欢
          相关资源
          最近更新 更多
          热门标签