You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium点击按钮触发Element's Click Intercepted错误,求更优解决方案

Selenium 点击被拦截(ElementClickInterceptedException)解决方案

该报错通常是目标元素还未完全加载至可点击状态、或被其他元素(如Cookie提示、广告弹窗、加载遮罩)遮挡导致点击事件无法触发。硬编码sleep无法适配不同网络/渲染速度的场景,可靠性极低,推荐使用以下方案优化:

优化方案

  • 使用显式等待代替硬sleep,主动监听元素可点击状态
    依赖Selenium自带的WebDriverWait和预期条件判断,自动等待最长指定时间,元素就绪后立即执行操作,不需要无脑等待固定时长,显式等待的最长等待时间可以根据实际网络情况调整。
  • 通过JS执行点击操作,绕过前端元素遮挡限制
    部分场景下遮挡元素是临时渲染的、无法主动关闭,可以直接调用JS原生点击逻辑,不受页面元素层级限制,稳定性更高。
  • 提前处理遮挡元素
    如果页面存在固定的Cookie弹窗、广告遮罩,优先找到对应元素关闭后再操作目标按钮。

修改后的完整代码

from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from win10toast import ToastNotifier as Notifier
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver

Path: str = "C:\\Users\\rolan\\Desktop\\chromedriver.exe"
Link: str = "https://www.roblox.com"

Notification = Notifier()
Notification.show_toast("hulks bot", "settings things up...")

Option = Options()
Option.add_argument("start-maximized")
# 可选:添加参数禁用弹窗/通知,减少遮挡概率
Option.add_argument("--disable-popup-blocking")
Option.add_argument("--disable-notifications")

Browser = webdriver.Chrome(service = Service(Path), options = Option)
Browser.get(Link)

def Perform_Actions():
    # 最长等待10秒,直到登录按钮可点击
    wait = WebDriverWait(Browser, 10)
    login_button = wait.until(EC.element_to_be_clickable((By.ID, "main-login-button")))
    
    # 方式1:普通点击,适合无遮挡场景
    # login_button.click()
    
    # 方式2:JS点击,适合有遮挡的场景,优先使用
    Browser.execute_script("arguments[0].click();", login_button)

Perform_Actions()

补充说明

如果修改后仍然报错,可以先手动打开目标网站确认是否有固定的前置遮挡元素,比如Cookie同意按钮,找到对应元素的选择器,在点击登录按钮前先执行关闭遮挡元素的操作即可。

内容的提问来源于stack exchange,提问作者retard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:24:02