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

如何使用Puppeteer绕过Cloudflare人机验证复选框?

解决Puppeteer被Cloudflare人机验证拦截的问题

针对你遇到的Cloudflare复选框验证拦截(手动勾选也反复刷新),可以通过以下方式优化Puppeteer配置,绕过Cloudflare的检测:

1. 添加浏览器启动参数,模拟真实用户环境

Cloudflare会通过浏览器特征识别自动化工具,需要禁用Puppeteer的自动化标识,同时配置真实的浏览器参数:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-blink-features=AutomationControlled', // 禁用自动化控制标识
      '--user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"', // 设置真实用户代理
      '--start-maximized' // 最大化窗口模拟真实操作
    ],
    ignoreDefaultArgs: ['--enable-automation'] // 移除默认自动化启动参数
  });
  const page = await browser.newPage();

  await page.setViewport({ width: 1920, height: 1080 });
  await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');
  await page.setDefaultTimeout(120000);

  await page.goto('https://example.com/login');

  // 处理Cloudflare验证
  try {
    // 等待验证框出现并点击(根据截图调整选择器)
    await page.waitForSelector('#cf-chl-widget', { timeout: 10000 });
    await page.click('#cf-chl-widget');
    // 等待验证完成,直到登录表单加载
    await page.waitForSelector('.login__input', { timeout: 30000 });
  } catch (err) {
    console.log('未检测到验证框或验证超时');
  }

  // 后续登录操作
  await page.click('.login__input');
  await page.waitForSelector('#j_username');
  await page.type('#j_username', 'LOGIN');
  await page.type('#j_password', 'PASSWORD');
  await page.click('[type="submit"]');
})();

2. 使用Stealth插件增强伪装

如果上述方法无效,可借助puppeteer-extra和stealth插件自动隐藏所有Puppeteer自动化特征:

安装依赖:

npm install puppeteer-extra puppeteer-extra-plugin-stealth

修改后代码:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

puppeteer.use(StealthPlugin());

(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--start-maximized'
    ]
  });
  const page = await browser.newPage();

  await page.setViewport({ width: 1920, height: 1080 });
  await page.setDefaultTimeout(120000);

  await page.goto('https://example.com/login');

  // 处理Cloudflare验证
  try {
    await page.waitForSelector('#cf-chl-widget', { timeout: 10000 });
    await page.click('#cf-chl-widget');
    await page.waitForSelector('.login__input', { timeout: 30000 });
  } catch (err) {
    console.log('验证处理异常:', err);
  }

  // 登录操作
  await page.click('.login__input');
  await page.waitForSelector('#j_username');
  await page.type('#j_username', 'LOGIN');
  await page.type('#j_password', 'PASSWORD');
  await page.click('[type="submit"]');
})();

关键注意事项

  • 调整验证框选择器:根据你提供的截图,替换#cf-chl-widget为实际的复选框元素选择器。
  • 模拟真实操作节奏:可在点击验证框后添加await page.waitForTimeout(2000)延迟,避免操作过快被识别。
  • 控制请求频率:Cloudflare会根据请求密度触发严格验证,避免短时间内重复请求同一页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:58:35