开源免费爬虫浏览器、反检测指纹浏览器之过webdriver特征和过无头模式检测

06-01 1052阅读

1. WebDriver 检测的核心原理

Chromium 浏览器在自动化测试时(通过 WebDriver、Selenium 或 Puppeteer)会暴露特定的特征,网站可以通过这些特征检测是否处于自动化环境。以下是主要的检测机制:

1.1 navigator.webdriver 属性

  • 检测原理:

    当浏览器被 WebDriver 控制时,Chromium 会自动设置 navigator.webdriver = true,而普通浏览器中该值为 undefined 或 false。

  • 检测代码示例:
    if (navigator.webdriver) {
      console.log("检测到自动化脚本!");
    }
    

    1.2 命令行参数检测

    • 检测原理:

      WebDriver 启动浏览器时会添加特定参数(如 --enable-automation、--headless),这些参数可能被 JavaScript 检测。

    • 检测代码示例:
      const userAgent = navigator.userAgent.toLowerCase();
      if (userAgent.includes('headless') || userAgent.includes('enable-automation')) {
        console.log("检测到无头模式或自动化环境!");
      }
      

      2. 绕过 WebDriver 检测的方法

      2.1 修改 navigator.webdriver 属性

      方法 1:使用 Chrome DevTools Protocol (CDP) 覆盖属性

      在启动浏览器时,通过 CDP 注入脚本,删除或覆盖 navigator.webdriver:

      from selenium import webdriver
      options = webdriver.ChromeOptions()
      options.add_argument("--disable-blink-features=AutomationControlled")
      driver = webdriver.Chrome(options=options)
      driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
          "source": """
          delete navigator.__proto__.webdriver;
          Object.defineProperty(navigator, 'webdriver', { get: () => false });
          """
      })
      
      方法 2:直接修改 Chromium 源码(高级)
      • 文件路径:third_party/blink/renderer/core/frame/navigator.cc
      • 修改方式:强制返回 false,使 navigator.webdriver 始终为假。
        bool Navigator::webdriver() const {
            return false;  // 直接返回 false,绕过检测
            /*
            if (RuntimeEnabledFeatures::AutomationControlledEnabled())
                return true;
            bool automation_enabled = false;
            probe::ApplyAutomationOverride(GetExecutionContext(), automation_enabled);
            return automation_enabled;
            */
        }
        

        编译生效:修改后需重新编译 Chromium 才能生效。


        2.2 绕过无头模式(Headless)检测

        方法 1:修改 userAgent 和启动参数
        options = webdriver.ChromeOptions()
        options.add_argument("--headless=new")  # 新版 Chrome 推荐方式
        options.add_argument("--disable-blink-features=AutomationControlled")
        options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
        driver = webdriver.Chrome(options=options)
        
        方法 2:修改 Chromium 源码(彻底绕过)
        • 文件路径:src/headless/lib/browser/headless_browser_impl.cc
        • 修改方式:将 HeadlessChrome 改为 Chrome,避免被检测到无头模式。
          // 原代码:const char kHeadlessProductName[] = "HeadlessChrome";
          const char kHeadlessProductName[] = "Chrome";  // 修改后
          

          编译生效:修改后需重新编译 Chromium。


          4. 总结

          检测方式绕过方法
          navigator.webdriverCDP 注入脚本 / 修改 Chromium 源码
          命令行参数 (--enable-automation)移除参数 / 修改 userAgent
          无头模式 (HeadlessChrome)修改源码 / 使用 --headless=new
          自动化扩展检测禁用 enable-automation

          最佳实践:

          1. 优先使用 CDP 注入脚本(无需修改源码)。
          2. 如需长期稳定绕过,可编译修改版 Chromium。

          通过本文,你可以彻底理解 WebDriver 检测机制,并掌握多种绕过方法,适用于爬虫、自动化测试等场景。

          本专题系列教程源码将放在 github 上开源指纹浏览器供大家学习,大家可以关注我,或者star github项目来收到更新通知。

          开源免费爬虫浏览器、反检测指纹浏览器之过webdriver特征和过无头模式检测
          (图片来源网络,侵删)
          开源免费爬虫浏览器、反检测指纹浏览器之过webdriver特征和过无头模式检测
          (图片来源网络,侵删)
          开源免费爬虫浏览器、反检测指纹浏览器之过webdriver特征和过无头模式检测
          (图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码