解决在使用 Selenium 调用 click 事件时报错 Element:ElementClickInterceptedException

老王今天在用 Selenium + Chrome 处理一个爬虫问题时,调用了一个元素的 click() 方法模拟点击事件,但是有些时候代码会返回 error: Message: element click intercepted 的错误。本文分享下错误原因和解决方法。

一、问题描述与原因

代码:

_browser.find_element_by_id('opt204163622').click()

错误信息:

error: Message: element click intercepted: Element <li class=””>…</li> is not clickable at point (407, 585). Other element would receive the click: <image width=”198px” height=”22px” preserveAspectRatio=”xMidYMid slice”></image>
(Session info: headless chrome=86.0.4240.111)

这个错误并不是 100% 出现的,有时候代码能得到期望的结果,有时候则会返回错误。错误的原因从错误信息里也能清楚看出来:所选的元素并不能点击,因为它被另一个元素覆盖了。

二、问题解决方法

出现这个问题的原因是网页还没有加载成功,所以主要找到两个解决思路:

  1. 等待网站加载完成
  2. 使用另一个方式调用 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)

这个调用方法是老王自己亲自试用的,100% 解决了之前 element click intercepted 的问题。

网上还有一种方案也可以代替 click() 方法解决这个错误,大家也可以尝试下:

element = driver.find_element_by_id('opt204163622')
webdriver.ActionChains(driver).move_to_element(element ).click(element ).perform()
赞(3)
关注我们
未经允许不得转载:老王博客 » 解决在使用 Selenium 调用 click 事件时报错 Element:ElementClickInterceptedException

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址