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

Puppeteer启动新页面触发Cloudflare验证码问题求助

Cloudflare验证码触发问题解决方法

问题核心

手动在Puppeteer启动的浏览器中访问目标站点无验证码,但通过browser.newPage()+page.goto()访问时触发Cloudflare验证,推测是Cloudflare近期更新了自动化检测规则,针对脚本创建页面的行为做了识别。

具体修复步骤

1. 修正浏览器启动参数

你的代码中存在ignoreDefaultArgs重复赋值的问题,同时需要移除暴露自动化身份的参数,添加隐藏特征的参数:

browser = await puppeteer.launch({
  headless: false,
  executablePath: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
  // 移除重复的ignoreDefaultArgs设置,保留参数数组并删除--enable-automation
  ignoreDefaultArgs: [
    "--allow-pre-commit-input",
    "--disable-background-networking",
    "--disable-background-timer-throttling",
    "--disable-backgrounding-occluded-windows",
    "--disable-breakpad",
    "--disable-client-side-phishing-detection",
    "--disable-component-extensions-with-background-pages",
    "--disable-component-update",
    "--disable-default-apps",
    "--disable-dev-shm-usage",
    "--disable-extensions",
    "--disable-features=Translate,BackForwardCache,AcceptCHFrame,MediaRouter,OptimizationHints",
    "--disable-hang-monitor",
    "--disable-ipc-flooding-protection",
    "--disable-popup-blocking",
    "--disable-prompt-on-repost",
    "--disable-renderer-backgrounding",
    "--disable-sync",
    "--enable-blink-features=IdleDetection",
    "--enable-features=NetworkServiceInProcess2",
    "--export-tagged-pdf",
    "--force-color-profile=srgb",
    "--metrics-recording-only",
    "--no-first-run",
    "--password-store=basic",
    "--use-mock-keychain",
    "--remote-debugging-port=0",
  ],
  args: [
    "--user-data-dir=C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data",
    "--flag-switches-begin",
    "--remote-debugging-port=9222",
    "--enable-features=GlobalMediaControlsCastStartStop",
    "--flag-switches-end",
    // 添加隐藏自动化控制的参数
    "--disable-blink-features=AutomationControlled"
  ],
});

2. 模拟手动打开新标签页的行为

放弃直接用browser.newPage()创建页面,改用真实用户打开标签页的方式(通过已有页面执行window.open):

// 获取浏览器初始加载的页面
const existingPages = await browser.pages();
const mainPage = existingPages[0];

// 监听新标签页创建事件
const newPagePromise = new Promise(resolve => {
  browser.once('targetcreated', async target => {
    const page = await target.page();
    if (page) resolve(page);
  });
});

// 在主页面中打开目标站点
await mainPage.evaluate(url => window.open(url), "https://...");

// 获取新打开的页面并等待加载完成
const page = await newPagePromise;
await page.waitForNavigation({ waitUntil: 'networkidle2' });

3. 补充隐藏自动化特征

  • 同步手动访问的User-Agent(从浏览器开发者工具的请求头中复制真实值):
await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36");
  • 移除navigator.webdriver标识:
await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, 'webdriver', {
    get: () => undefined,
    configurable: true
  });
});

原理说明

Cloudflare的新检测规则会识别脚本创建页面时的特殊标识(比如browser.newPage()带来的页面初始化特征、启动参数中的自动化标记),而模拟手动打开标签页的行为更贴近真实用户操作,同时隐藏自动化相关的属性和参数,就能规避这类检测。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:17:01