python selenium 点击页面元素时报错:ElementClickInterceptedException

在用selenium做自动签到时遇到了一个棘手的问题,弄得半天查了许多资料终于解决了!

问题
在查找页面中的一个元素并对其进行点击时selenium抛出错误,按字面上解释是“其他元素会接受点击”。

具体错误如下

selenium.common.exceptions.ElementClickInterceptedException: Message: element is not clickable at point (473,655). Other element would receive the click: <div></div>

猜测原因

  1. 使用xpath获取到的元素不是唯一的。 (不是,通过xpath finder插件查找确实是唯一的元素)
  2. 元素无法被点击。(不是,排除网络原因后将鼠标放在button上是可以被点击的,而且也用webdriverwait排除了这个原因)
  3. 元素被遮挡。(不是,期间并没有其它可见元素遮挡)

实际原因
用selenium模拟用户单击元素时,JS有一个操作鼠标悬浮的时候会对元素进行修改。

在网络上搜寻问题后,最后从种种答案中找到了以下两种方法:

  1. 用JS来操作元素
    nextBtn1 = self.driver.find_element_by_xpath('/html/body/div[1]/div/div[1]/div/div[2]/button')
    self.driver.execute_script("$(arguments[0]).click()", nextBtn1)
  2. 用selenium下的ActionChains类构建行为链模拟鼠标行为
    actions = webdriver.ActionChains(driver)
    actions.move_to_element(to_element)

我使用的是第一种方法,真的成功解决了!第二种其实在之前我就试过了,并没有用,但是网上很多人说第二种也行,所以我也先记录下来,说不定下次就用上了呢!

点赞
  1. 百度seo优化说道:

    pahton 人工智能语音不错的

    1. 三拳叔 三拳叔说道:

      python并不只有人工智能,其它方面也很不错,嘿嘿~

发表评论

电子邮件地址不会被公开。必填项已用 * 标注