Selenium关闭弹窗时无有效xpath、点击偶发触发拦截异常问题咨询
解决方案
报错原因
你收到的ElementClickInterceptedException报错,本质是弹窗加载时生成了类名为absolute-fill text-left的全局遮罩层,覆盖在body元素上方,你直接点击body的操作大部分时候会被这个遮罩层拦截,只有极个别未被遮挡的坐标能触发点击,所以会出现偶尔生效的情况。
可行方案(均不占用本地鼠标操作)
方案1:直接点击遮罩层
报错信息已经明确给出了拦截点击的元素属性,直接定位该遮罩层点击即可,稳定性远高于点击body:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待遮罩层可点击后直接点击 WebDriverWait(DRIVER, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.absolute-fill.text-left'))).click()
方案2:使用JS触发点击(完全不受元素遮挡影响)
Selenium原生点击会做元素可见性、遮挡校验,而通过JS执行点击可以直接触发元素的点击事件,不会被上层元素拦截,也不会占用本地鼠标:
# 直接触发body点击,无需考虑元素遮挡 DRIVER.execute_script("document.body.click()") # 也可以选择直接触发遮罩层的点击,效果一致 # DRIVER.execute_script("document.querySelector('div.absolute-fill.text-left').click()")
方案3:发送ESC按键关闭弹窗
绝大多数这类模态弹窗都支持ESC按键关闭,无需定位任何点击元素,操作更简单:
from selenium.webdriver.common.keys import Keys # 给body元素发送ESC按键 WebDriverWait(DRIVER, 10).until(EC.element_to_be_clickable((By.TAG_NAME, 'body'))).send_keys(Keys.ESCAPE)
内容的提问来源于stack exchange,提问作者user17187571
相关产品推荐
相关产品推荐

