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

Selenium WebDriver反检测参数原理与反爬绕过机制解析

网站识别自动化爬虫的核心机制

站点识别Selenium类WebDriver爬虫的核心逻辑,本质是捕捉「自动化控制的浏览器和真人使用的正常浏览器之间的差异」,最常见的基础检测维度有三个:

  • 渲染内核层面的特征标记:Chrome使用的Blink内核在开启自动化控制模式时,会自带一组专属特征,包括暴露固定的内核状态标记、修改事件响应/权限弹窗的默认逻辑、改变部分DOM API的返回值,这些差异都可以被页面脚本读取识别。
  • 浏览器启动痕迹:原生Selenium启动Chrome时,默认会带上enable-automation启动开关,同时自动加载官方的自动化调试扩展。前者会让浏览器顶部弹出「正受到自动测试软件控制」的提示条,还会在浏览器内部留下可被脚本读取的启动标记;后者会向页面上下文注入专属的通信接口,属于非常明显的自动化痕迹。
  • 标准属性标记:W3C规范里专门给自动化控制的浏览器定义了navigator.webdriver属性,正常真人使用的浏览器这个属性值为undefined,而原生未修改的Selenium启动的浏览器,这个属性会固定返回true,是最基础也最常用的检测点。
你所用代码的具体绕过逻辑

你贴的这几段代码,刚好对应覆盖了上面说的三类基础检测点,每段的作用如下:

options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})
  • options.add_argument('--disable-blink-features=AutomationControlled'):直接向Blink内核传参,关闭内核层面的自动化控制特性。开关关闭后,内核不会再因为处于自动化模式修改默认行为,从渲染引擎最底层抹掉自动化模式带来的特征差异。
  • options.add_experimental_option('excludeSwitches', ['enable-automation']):从Chrome的启动开关列表里剔除Selenium默认加上的enable-automation标记。去掉这个标记后,浏览器不会再弹出顶部的自动化控制提示条,页面脚本也无法通过读取启动开关列表识别到自动化环境。
  • options.add_experimental_option('useAutomationExtension', False):禁用Selenium默认自动加载的官方自动化调试扩展,避免这个扩展向页面注入专属JS接口,消除扩展层面的识别痕迹。
  • 最后一段CDP调用逻辑:通过Chrome DevTools协议的页面脚本注入能力,让浏览器在每一个新文档加载、页面自身的任何脚本开始执行之前,先运行你传入的JS代码。这段代码重写了navigator.webdriver属性的getter方法,让这个属性永远返回和正常浏览器一致的undefined。之所以要提前到页面脚本执行前注入,是为了防止站点在页面加载的第一时间就读取这个属性做检测,避免等页面加载完再修改属性时已经被站点记录到异常值。

补充说明:这组代码只能绕过最基础的WebDriver特征检测,目前多数有强反爬的站点还会叠加检测鼠标移动轨迹、点击间隔、浏览器指纹(Canvas、WebGL、字体列表、WebRTC等)、CDP调用特征等,不是加了这几行代码就可以完全避免被识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:27:17