用selenium爬数据的时候,明明每一步点击都加了WebDriverWait,但还是爬一会儿就显示如下错误:
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <tr class="even" onclick="onclick_shipinsp(this,'insp')">...</tr> is not clickable at point (509, 404). Other element would receive the click: <div class="blockUI blockOverlay ui-widget-overlay" style="z-index: 1000; position: fixed; opacity: 0;"></div>
(Session info: chrome=110.0.5481.178)
这里一定要注意后面的这句
“ Other element would receive the click: <div class="blockUI blockOverlay ui-widget-overlay" style="z-index: 1000; position: fixed; opacity: 0;"></div>
(Session info: chrome=110.0.5481.178)
”
也就是说我们想点击的按钮没点成,而是被这个覆盖了。
查资料得知:
blockUI 是一个 JavaScript 库,用于创建可定制的页面遮罩和加载指示器。它提供了一个简单的方式来阻止用户在页面加载或执行某些任务时进行交互,并显示一个加载指示器,以提示用户页面正在处理。
解决尝试一:
加一个异常处理块,这里try块中是之前报错的地方,一旦出现异常则对之前bug说明里出现的元素进行隐藏,然后再次尝试点击。
try:
driver.find_element(By.XPATH,xpath_pattern).click()
except:
wait = WebDriverWait(driver, 100)
element = wait.until(EC.visibility_of_element_located((By.CLASS_NAME, 'blockUI blockOverlay ui-widget-overlay')))
driver.execute_script("arguments[0].style.display = 'none';", element)
try:
driver.find_element(By.XPATH,xpath_pattern).click()
尝试之后:比之前多撑了一会儿但在except块中还是会报错找不到元素。
解决尝试二:文章来源:https://www.toymoban.com/news/detail-511590.html
for i in range(3):
try:
click_button(driver, index_xpath)
break
except:
# 如果点击元素失败,检查元素是否存在且可见
block_overlay = driver.execute_script(
"return document.querySelector('.blockUI.blockOverlay.ui-widget-overlay')")
if block_overlay and block_overlay.is_displayed():
# 如果元素存在且可见,隐藏元素
driver.execute_script(
"document.querySelector('.blockUI.blockOverlay.ui-widget-overlay').style.display='none';")
try:
click_button(driver, index_xpath)
break
except:
# 如果还是失败,等待一段时间再尝试
time.sleep(10)
目前这种解决方法暂时可行。学习爬虫不久,有更好方法的朋友欢迎指教。文章来源地址https://www.toymoban.com/news/detail-511590.html
到了这里,关于解决selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!