ElementClickInterceptedException:元素点击被拦截:[重复]

Posted

技术标签:

【中文标题】ElementClickInterceptedException:元素点击被拦截:[重复]【英文标题】:ElementClickInterceptedException: element click intercepted: [duplicate] 【发布时间】:2019-11-08 19:06:00 【问题描述】:

我正在尝试使用 selenium + python 在 wordpress 插件上提交一份表单。当我按下发布按钮时,它给出了一个错误。

ElementClickInterceptedException: 元素点击被拦截: Element type="submit" name="publish" id="publish" class="button button-primary button-large" value="Publish"> 在点 (728, 15) 不可点击。其他元素会收到点击: ...

我尝试了以下解决方案: 使用动作驱动程序,但它不起作用。 使用 webdriverwait() 函数,它不起作用。 使用了 Xpath、CSS 选择器、ID - 这三个都给出了相同的错误。

 `    browser.find_element_by_css_selector("""#save-post""").click()

    WebDriverWait(driver, 90).until(EC.element_to_be_clickable((By.ID, "save-post"))).click()
`

请注意,当我在 python 控制台中运行该特定行时,它正在工作。但是在运行完整的脚本时,它显示错误。

门户上有很多类似的问题,但没有一个有效。请帮我解决这个问题。

【问题讨论】:

【参考方案1】:

好的,答案在错误消息中 - “Other element would receive the click: ...” 我刚开始使用 selenium 时遇到了同样的问题,不知道是什么问题。 “Other element would receive the click: ...”表示上面有其他元素(重叠)你的元素(弹出窗口,页面变灰(加载时禁用,一些JS运行)),所以当 Selenium 试图点击你的元素时,它实际上是点击了那个阻塞元素。 Selenium 运行得非常快并且在它变得可点击之前点击,这就是为什么你无法点击它 - “当我在 python 控制台中运行该特定行时,它正在工作”尝试在一段时间后点击.sleep() 5-10 秒。如果是这种情况,那么您可以在找到您的元素之前使用等待或添加条件来检查阻止点击您的元素的元素不存在,然后您点击您的元素。

【讨论】:

在某些情况下睡眠无济于事,因为有一个元素故意覆盖该元素以拦截点击。在这种情况下,您可以尝试先单击重叠元素。 (这个元素可能会做一些事情,然后将点击发送到您最初尝试点击的项目......所以有时这就是所有必要的) 我同意,但根据他所说的 - “当我在 python 控制台中运行该特定行时,它正在工作”。在这种情况下,睡眠或等待条件应该起作用。因为他在调试的时候,执行速度比较慢,而且在他点击阻塞元素的时候已经不存在了。我建议,使用浏览器中的调试(开发工具)找到首先获得点击的元素,然后编写简单的while循环(检查阻塞元素是否存在等待1-2秒)超时(如果一段时间后仍然存在则抛出异常,以防万一)。 @IPoln​​ik 谢谢。但你能告诉我如何找到阻止它的元素吗? @Niravsays 在我的情况下,错误消息给了我拦截点击的确切元素“其他元素将收到点击:<div id="...></div> 尝试滚动到元素然后尝试点击它

以上是关于ElementClickInterceptedException:元素点击被拦截:[重复]的主要内容,如果未能解决你的问题,请参考以下文章