在用 Selenium + Chrome 处理一个爬虫问题时,调用了一个元素的 click() 方法模拟点击事件,但是有些时候代码会返回 error: Message: element click intercepted
的错误。本文分享下错误原因和解决方法。
一、问题描述与原因
代码:
_browser.find_element_by_id(‘opt204163622’).click()
错误信息:
error: Message: element click intercepted: Element
… is not clickable at point (407, 585). Other element would receive the click:
(Session info: headless chrome=86.0.4240.111)
这个错误并不是 100% 出现的,有时候代码能得到期望的结果,有时候则会返回错误。错误的原因从错误信息里也能清楚看出来:所选的元素并不能点击,因为它被另一个元素覆盖了。
二、问题解决方法
出现这个问题的原因是网页还没有加载成功,所以主要找到两个解决思路:
等待网站加载完成
使用另一个方式调用 Selenium click 事件
解决方法一:
设置 Selenium 等待时间:browser.set_page_load_timeout(60)
,并通过 time.sleep(30)
来等待网站加载,但是还是不能 100% 解决问题。
解决方法二:
使用另一个调用 click 事件的方法代替 click() 方法:
_item = _browser.find_element_by_id('opt204163622')
_browser.execute_script("arguments[0].click();", _item)
解决方法三:
网上还有一种方案也可以代替 click() 方法解决这个错误,大家也可以尝试下:
element = driver.find_element_by_id('opt204163622')
webdriver.ActionChains(driver).move_to_element(element ).click(element ).perform()
原文:https://laowangblog.com/selenium-element-click-intercepted.html