代码改变世界

Playwright 爬虫绕过 Cloudflare 人机验证

2025-07-22 23:46  音乐让我说  阅读(279)  评论(0)    收藏  举报

1. 问题描述

有些网关接入了Cloudflare的人机验证组件,当使用 Playwright 等自动化工具爬取的时候,会被人机验证阻拦。阻断的效果如下:

2. 问题原因

Selenium、Puppeteer、Playwright等自动化控制工具的实现都会遵循一个规范,就是使用这些工具的时候,获取 navigator 的 webdriver 属性时,会返回 true,而普通浏览器会返回 undefined

 

3. 解决方案

方案1:通过CDP修改属性

cdp为Chrome Devtools-Protocol(Chrome 开发工具协议)。
代码如下:

            string js = @"Object.defineProperty(navigator, 'webdriver', {
                        get: () => undefined
            })";
            await page.AddInitScriptAsync(js);

 

执行后, navigator.webdriver, 其值变成了 undefined 了。

 

【无效】方案2:增加启动参数

在浏览器启动参数中增加 --disable-blink-features=AutomationControlled 参数。
代码如下:

// 初始化浏览器实例
  const context = await chromium.launchPersistentContext(userDataDir, {
    headless: false,
    args: [
      "--disable-gpu",
      "--disable-software-rasterize",
      "--disable-blink-features=AutomationControlled",
    ],
  });

 

这个方案可以修改值,但只是修改为 false ,而不是移除该参数,依然无法解决。

 

4. 参考资料

  1. 使用Playwright绕过Webdriver检测
  2. 一种取巧的方式绕过 Cloudflare v2 验证
  3. (新)关于修改window.navigator.webdriver代码失效问题
  4. CDPSession-Playwright

其它

转载自:https://www.cnblogs.com/bettergoo/p/17852501.html