在用selenium做自动签到时遇到了一个棘手的问题,弄得半天查了许多资料终于解决了!
问题
在查找页面中的一个元素并对其进行点击时selenium抛出错误,按字面上解释是“其他元素会接受点击”。
具体错误如下
selenium.common.exceptions.ElementClickInterceptedException: Message: element is not clickable at point (473,655). Other element would receive the click: <div></div>
猜测原因
- 使用xpath获取到的元素不是唯一的。 (不是,通过xpath finder插件查找确实是唯一的元素)
- 元素无法被点击。(不是,排除网络原因后将鼠标放在button上是可以被点击的,而且也用webdriverwait排除了这个原因)
- 元素被遮挡。(不是,期间并没有其它可见元素遮挡)
实际原因
用selenium模拟用户单击元素时,JS有一个操作鼠标悬浮的时候会对元素进行修改。
在网络上搜寻问题后,最后从种种答案中找到了以下两种方法:
- 用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)
- 用selenium下的ActionChains类构建行为链模拟鼠标行为
actions = webdriver.ActionChains(driver) actions.move_to_element(to_element)
我使用的是第一种方法,真的成功解决了!第二种其实在之前我就试过了,并没有用,但是网上很多人说第二种也行,所以我也先记录下来,说不定下次就用上了呢!
pahton 人工智能语音不错的
python并不只有人工智能,其它方面也很不错,嘿嘿~