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

