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

ChromeDriver默认启用DevTools致自动化测试被拦截,能否关闭?

解决ChromeDriver隐式使用DevTools导致的页面跳转问题

ChromeDriver无法完全关闭DevTools——它的核心工作机制就是依赖Chrome DevTools Protocol(CDP)与浏览器通信,所有自动化控制指令都通过这个协议发送。所以我们需要换思路,绕过网站的devtools-opened事件检测。

以下是几种可行的解决方案:

方案1:预注入脚本覆盖关键函数/拦截事件

通过Chrome DevTools Protocol在页面加载前注入脚本,直接修改网站的检测逻辑:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--log-level=3')
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])

driver = webdriver.Chrome(options=chrome_options)

# 注入预加载脚本,在页面初始化前生效
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': """
    // 让closeWindow函数空实现,即使触发也不会跳转
    window.closeWindow = function() {};
    
    // 拦截devtools-opened事件的监听,不让网站注册该事件
    const originalAddEventListener = window.addEventListener;
    window.addEventListener = function(type, listener) {
        if (type !== 'devtools-opened') {
            originalAddEventListener(type, listener);
        }
    };
    """
})

# 访问目标网站
driver.get("你的测试页面URL")

这个方法的核心是在网站的JavaScript代码执行前,提前修改全局函数和事件监听逻辑,从根源上阻断跳转触发条件。

方案2:禁用DevTools相关UI(辅助方案)

可以尝试添加Chrome启动参数,限制DevTools的功能,虽然不能完全阻止CDP通信,但可能减少触发检测的概率:

chrome_options.add_argument('--disable-devtools')
chrome_options.add_argument('--devtools-flags=disable')

注意:这个参数在不同Chrome版本中的效果可能有差异,建议结合方案1使用。

方案3:使用旧版无头模式(可选)

如果你的测试场景允许无头模式,可以尝试使用旧版无头模式(--headless=old),它的DevTools行为与新版略有不同,可能不会触发网站的检测:

chrome_options.add_argument('--headless=old')

不过这个方案兼容性较差,后续Chrome版本可能会移除旧版无头模式,优先推荐方案1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:07:35