【问题标题】:How to fix this issue element not interactable Selenium Python如何解决此问题元素不可交互的 Selenium Python
【发布时间】:2019-10-05 05:44:47
【问题描述】:

我的脚本代码中有以下行,我从 Selenium IDE 获得的 XPath 工作正常:

driver.find_element_by_xpath("(//a[contains(@href, '')])[20]").click()

自动化测试在此处停止并出现此错误:

Traceback (most recent call last):
File "Script.py", line 65, in <module>
    driver.find_element_by_xpath("//a[contains(@href, '')])[20]").click()
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable
(Session info: chrome=74.0.3729.131)
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 6.1.7601 SP1 x86_64)

如何解决这个问题?

感谢您的帮助。

【问题讨论】:

  • 您是在抓取数据还是对正在编码的网站的可用性进行测试?对于这些情况,解决方案将大不相同
  • @Reedinationer 嗨,我只想自动化几个我需要在网站上经常执行的步骤,并且需要一些时间。不是我正在编码的网站。

标签: python selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

既然你只是想抓取数据,我建议你使用这个解决方案:

element = driver.find_element_by_xpath("(//a[contains(@href, '')])[20]")
driver.execute_script("arguments[0].click();", element)

通过 Javascript 点击元素,而不是 selenium 使用的“自然”点击(试图模拟用户体验)。

我回复了a similar question here,它也链接到另一个帖子。

【讨论】:

  • 优秀。非常感谢您的帮助,它工作完美!我在哪里可以看到使用 Javascript 解决此类问题的 selenium 示例?到目前为止,我认为我只使用 Python 来使用 Selenium,呵呵,但我看到添加 Javascript 可以执行更强大的选项。那么arguments是一个数组吗?因为你使用了arguments[0]
  • @GerCas 我只是从this guy 中拿了那个例子,并不知道如何很好地编写javascript。从the documentation 看来,arguments 只会打开你提供给它的任何东西。所以也许driver.execute_script("arguments[0].click();arguments[1].click()", element1, element2) 是有效的,但我不需要任何复杂的东西。祝你好运!
  • 感谢您的帮助。
  • 您拯救了我的项目、我的工作和我的生命!谢谢大佬帮忙
【解决方案2】:

我想分享我的经验,以防其他人有同样的情况。
我收到了相同的错误消息“消息:元素不可交互”。
经过大约两个小时的故障排除后,XPATH 发现了另一个 hidden 元素。因此,我修改了 XPATH 以确保仅捕获目标元素。

【讨论】:

    【解决方案3】:

    有时您可能需要复制完整的 XPATH。这是我发现的一种解决方法。

    【讨论】:

      【解决方案4】:

      对于将来来到这里的任何人,我都能够通过使用完整的 Xpath 而不是 x 路径来解决这个问题,我希望这会有所帮助。我认为这是因为我要单击的元素被另一个元素包裹,因此无法交互

      【讨论】:

        猜你喜欢
        • 2020-03-08
        • 2021-12-16
        • 1970-01-01
        • 2021-08-02
        • 1970-01-01
        • 2017-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多