非无头模式Puppeteer被Re-Captcha识别为bot,求适配非无头的同类隐身插件
非无头模式Puppeteer被reCAPTCHA标记为机器人的解决方案
你提到认为puppeteer-extra-plugin-stealth仅适配无头模式,这是常见误解,该插件本身同时支持无头、非无头两种运行模式,可直接在非无头场景下使用。
核心问题排查
你遇到的拦截差异本质来源于Puppeteer默认调用的Chromium和你日常使用的正式版Chrome的指纹差异,以及浏览器暴露的自动化运行标识,按以下步骤调整即可大幅降低拦截概率:
- 不要使用Puppeteer默认绑定的Chromium,改为调用本地安装的正式版Chrome可执行文件,reCAPTCHA对Chromium的默认指纹容忍度极低,正式版Chrome自带的安全组件、数字签名、媒体解码库都是绕过检测的必要条件
- 启动时强制移除自动化标记,添加参数
--disable-blink-features=AutomationControlled,这会删除浏览器层面暴露的自动化运行标识 - 启动时指定本地真实的Chrome用户配置目录,不要每次启动都生成全新的无痕上下文,带有正常浏览历史、Cookie、常用插件的配置文件会大幅降低reCAPTCHA的拦截概率
参考配置代码
const puppeteer = require('puppeteer-extra') const StealthPlugin = require('puppeteer-extra-plugin-stealth') puppeteer.use(StealthPlugin()) ;(async () => { const browser = await puppeteer.launch({ headless: false, // 替换为本地Chrome的实际安装路径 executablePath: 'C:/Program Files/Google/Chrome/Application/chrome.exe', // 替换为本地Chrome用户配置目录的路径,可在Chrome地址栏输入chrome://version查看 userDataDir: 'C:/Users/你的用户名/AppData/Local/Google/Chrome/User Data', args: [ '--disable-blink-features=AutomationControlled', '--start-maximized' ], // 关闭默认的自动化控制提示条 ignoreDefaultArgs: ['--enable-automation'] }) const page = await browser.newPage() // 后续写入你的业务逻辑代码 })()
额外优化措施
- 模拟用户真实操作:点击「我不是机器人」复选框前,添加随机延迟、模拟短距离鼠标移动轨迹,不要直接调用
page.click()触发点击 - 不要禁用浏览器的JavaScript、Cookie、WebGL等功能,这些都是reCAPTCHA指纹检测的必要项
- 若仍出现高强度验证,可在启动后手动先访问几个常规网站,产生正常的浏览行为痕迹后再访问目标站点
内容的提问来源于stack exchange,提问作者Anters Bear
相关产品推荐
相关产品推荐

