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
相关产品推荐
相关产品推荐

