如何使用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
相关产品推荐
相关产品推荐

