Puppeteer

Puppeteer 验证码识别工具:适用于 Node.js 和 puppeteer-extra

保留 puppeteer-extra-plugin-recaptcha 原样不动,或者 await capskip npm 客户端,无头 Chrome 就能拿到 reCAPTCHA、Turnstile、极验(GeeTest)v3 或扭曲文字图片的答案,全部在你自己的电脑上识别,不按页面计量。

Windows x64·本地运行,验证码不会离开你的电脑
  • 兼容 puppeteer-extra
  • 基于 Promise 的 npm 客户端
  • 无头运行不计量
每月验证码数量40,000
40.0k250.0k
别家按次收费,每 1,000 次约 $1.40$56.00
CapSkip Bronze,统一定价$35.00
$21.00留在你的口袋里按当前用量,每月如此

当无头 Chrome 遇到 reCAPTCHA、Turnstile 验证框或扭曲的图片时,CapSkip 就是你 Node.js 爬虫旁边的 Puppeteer 验证码识别工具。它运行在同一台 Windows 电脑或 VPS 上,把答案交给脚本直接填入,而不是让标签页一直等到超时。Puppeteer 能在任何地方点击和输入,却无法自己生成有效的 token。这部分由 CapSkip 应用完成,采用统一授权、识别不限量,非常适合一次爬取就可能打开数百个标签页的浏览器。

集成做到多深由你决定。已经在用 puppeteer-extra-plugin-recaptcha 的项目可以原封不动,照样通过 2Captcha 模拟器由 CapSkip 作答。新写的代码可以 npm install capskip,直接 await solver.recaptcha() 或 solver.turnstile(),开箱即带 TypeScript 类型。

覆盖范围远超插件扫描的那些。支持 reCAPTCHA v2、v3 和 Enterprise,Turnstile 的小组件形式和整页挑战形式,以及极验 v3 滑块、CaptchaFox、Capy Puzzle、工作量证明类的 ALTCHA 和 Friendly Captcha,还有数千种图片验证码样式,每张约 0.1 秒读出。hCaptcha、极验 v4、FunCaptcha 和 AWS WAF 不在支持范围内。Stealth 插件仍然有用,能让验证挑战出现得更少;漏网的那些则交给 CapSkip 通过。

你的 puppeteer-extra 配置一字不改。 recaptcha 插件保留它的 2captcha provider 和 page.solveRecaptchas() 调用。只要在 CapSkip 应用中开启 2Captcha 模拟器并添加到 hosts 文件,这些调用就会由运行 Chrome 的那台机器作答,而不是消耗预付余额。 跟着设置指南一步步来

Puppeteer 验证码识别工具为无头 Chrome 带来什么

puppeteer-extra-plugin-recaptcha 即插即用

插件保留它的 provider id 和每一个 page.solveRecaptchas() 调用。在 hosts 文件模式下使用 2Captcha 模拟器,它的请求就止步于你自己的电脑,余额分文不耗。

每种验证码类型 await 一个方法

npm install capskip,创建一个客户端,然后 await recaptcha()、turnstile()、geetest() 或 normal()。每个方法都以 result.code 返回结果,包内自带 TypeScript 类型定义。

Turnstile 页面配上正确的 user agent

solver.turnstile() 既支持嵌入式小组件,也支持 Cloudflare 整页检查。对于整页检查,它还会返回该 token 所对应的 userAgent,你可以用 page.setUserAgent 应用它。

在你启动的 Chrome 中加载扩展

把 CapSkip 扩展加载到 Puppeteer 启动的 Chrome 实例中,无论是有窗口模式还是新版无头模式,小组件都会在页面内直接通过,一行 token 代码都不用写。

多标签页并行,无需排队识别

每个页面发起一次识别,再用 Promise.all 汇总。没有按密钥的速率限制,线程也不限量,吞吐量取决于你的 CPU 和内存,而不是服务商的套餐等级。

重试永远不会出现在账单上

青铜套餐每月 35 美元,一台机器,识别不限量。一次把页面重新加载十次的爬取,或通宵循环运行的测试套件,花费都完全一样。

把 CapSkip 接入 Puppeteer 的三种方式

JavaScript
const puppeteer = require('puppeteer');
const { CapSkip } = require('capskip');

const solver = new CapSkip({ host: '127.0.0.1', port: 8080 });

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/login');

  const sitekey = await page.$eval('.g-recaptcha', el => el.dataset.sitekey);
  const { code } = await solver.recaptcha(sitekey, page.url());

  await page.evaluate(t => {
    document.getElementById('g-recaptcha-response').innerHTML = t;
  }, code);
  await page.click('button[type=submit]');
})();

Puppeteer 读取 sitekey,capskip 包中的 solver.recaptcha() 返回 token,再由 page.evaluate 在点击提交前把它填入页面。

在启动的浏览器中使用扩展

应用运行时,把 CapSkip 扩展放进 Puppeteer 打开的浏览器,验证挑战会在你的脚本等待下一个选择器时自动通过。Chrome 和 Firefox 版本都有。

capskip npm 客户端

基于 Promise 的 Node.js 客户端,带 TypeScript 类型。每个页面 await 一个 token 或文字结果,再用 page.evaluate 写入。另有 Python、PHP 和 C# 客户端可用。

为旧代码模拟 2Captcha API

puppeteer-extra-plugin-recaptcha 和其他 2Captcha 风格的客户端照常发送相同的请求,本地 API 在你的机器上作答,因此现有 Node 代码无需任何修改。

在托管的 reCAPTCHA 页面上试一试

把一个测试用的 Puppeteer 脚本,或装了扩展的 Chrome,对准我们在线的 reCAPTCHA v2 演示页,先看着 token 返回,再把同样的代码用到真实目标上。

让你的 Puppeteer 项目准备好应对验证码

  1. 在 Chrome 旁边安装应用

    在运行 Puppeteer 脚本的 Windows 机器或 VPS 上安装 CapSkip,并保持它开启。两者放在同一台机器上最简单,而 hosts 文件方式也要求如此。 下载安装程序

  2. 激活套餐或试用

    选择月度套餐或免费试用(3 天内 500 次识别),然后用发到你邮箱的凭据登录 CapSkip。 比较各套餐

  3. 在 Puppeteer 代码中调用它

    运行 npm install capskip 以直接调用,或在 hosts 文件模式下开启 2Captcha 模拟器,让 puppeteer-extra 照常工作,然后让脚本在真实页面上跑一遍。 查看 Node.js SDK

Puppeteer 验证码识别:本地运行还是按次计费

两种方案都能接入同一套 Puppeteer 代码。下表展示的是验证挑战离开你的脚本之后有哪些不同。

功能CapSkip2Captcha & API 服务
如何付费每月 35 美元起,无开通费,从不统计识别次数预付点数,按每千次识别定价,费用随页面数量增长
识别在哪里进行在 CapSkip 内部,在运行你爬虫的那台电脑上远程 API 或人工打码平台
接入 Node.js 的方式npm 客户端、浏览器扩展或本地 APIAPI 密钥,加上服务商客户端或 puppeteer-extra
puppeteer-extra-plugin-recaptcha照常工作,通过 2Captcha 模拟器在本地作答能用,但每个 token 都要从付费余额中扣除
图片验证码返回时间约 0.1 秒,在同一台机器上作答每张图片都得经历上传、排队、轮询
并行标签页不限线程,速度取决于你的硬件并发上限,或更贵的套餐
挑战数据始终留在运行 Chrome 的机器上每次识别都会发送给第三方

价格

不再按次付费

选择你的授权

黄金授权

$75/ 月

订阅黄金授权

授权即时激活

按月计费,可随时在账户中取消。

功能相同,机器越多,吞吐量越大。

每台机器的识别速度都受限于它自己的 CPU 和内存。机器越多,同时运行的线程就越多:白银可同时识别两倍数量的验证码,黄金则是三倍。

  • 无限解决,无每日上限
  • 无限线程,速度随硬件提升
  • 90% 至 100% 的识别准确率
  • 可直接替代主流打码服务的 API
  • 几乎兼容任何工具,无需编写代码
  • REST API、SDK 和浏览器扩展
  • 出现新的验证码类型时免费训练
  • 在你自己的机器上运行,数据不外传

上面展示的每一种验证码类型,每个授权都支持。 查看支持范围

想先试用一下?

开始 3 天免费试用,在你自己的目标上识别 500 个任意类型的验证码。

开始免费试用

如何在 Puppeteer 中识别 reCAPTCHA:插件方式还是 SDK 方式

在 Puppeteer 中用 CapSkip 识别 reCAPTCHA,有两种可靠的方式。插件方式原封不动地复用 puppeteer-extra-plugin-recaptcha。SDK 方式则由你自己调用 capskip npm 包,它还能处理 Turnstile、极验 v3 和图片验证码,而这些是插件从来不会去找的。

插件方式。打开 CapSkip 应用,开启 2Captcha 模拟器,然后点击 Add to hosts file。这只会在这一台电脑上把 2captcha.com 重定向到 CapSkip,因此运行 Puppeteer 的 Node 进程必须与应用位于同一台机器上。像以前一样注册插件,provider id 设为 2captcha,token 字段填入 CapSkip 设置中的密钥(关闭密钥验证时,任意文本都会被接受)。每次导航后,page.solveRecaptchas() 会找到小组件,把它们发给它仍以为是 2Captcha 的服务,并填入 CapSkip 返回的 token。

SDK 方式。执行 npm install capskip 后,创建一个指向 127.0.0.1、端口 8080 的客户端,全新安装的 CapSkip 就在这里监听。用 page.$eval 读取 sitekey,然后 await solver.recaptcha(sitekey, page.url())。隐形小组件需要传入 invisible: 1,reCAPTCHA v3 则需要 version v3 以及页面使用的 action。

请在两分钟内完成,因为 token 会过期。用 page.evaluate 把 result.code 写入 g-recaptcha-response 文本框,如果声明了小组件回调就触发它,然后提交。Turnstile 的做法完全相同,使用 solver.turnstile() 和 cf-turnstile-response 字段。对于图片验证码,把元素截图为 base64,再以 data:image/png;base64 字符串的形式传给 solver.normal()。

相关指南: Node.js 验证码识别 · 用 Node.js 识别 reCAPTCHA v2 · 2Captcha API 替代方案

在 Puppeteer 脚本中识别 reCAPTCHA 是什么样子?
使用 capskip npm 客户端只需三个 await 步骤:page.$eval 读取 data-sitekey 值,solver.recaptcha(sitekey, page.url()) 返回 token,page.evaluate 在你点击提交前把 result.code 写入 g-recaptcha-response。在 puppeteer-extra 项目中,一次 page.solveRecaptchas() 调用就能完成同样的工作。
puppeteer-extra-plugin-recaptcha 能把任务交给 CapSkip 吗?
可以,而且无需修改它。保留 2captcha provider id,然后在 CapSkip 应用中启用 2Captcha 模拟,并使用 Hosts file 旁边的 Add 按钮。之后插件发往 2captcha.com 的请求都会解析到那台电脑上的 CapSkip,所以请在与应用相同的电脑或 VPS 上运行脚本。
插件还需要一个已充值的 2Captcha 账户吗?
既不需要账户,也不需要余额。插件仍然要求它的 token 字段有值,所以粘贴 CapSkip 设置中显示的 API 密钥即可,关闭密钥验证时任意字符串也行。不会按次计费,因为请求从不离开你的机器。
为什么运行 page.solveRecaptchas() 之后还剩下一些验证挑战?
该方法只搜索 reCAPTCHA 和 hCaptcha 小组件,而 hCaptcha 不在 CapSkip 支持范围内。页面上的其他验证,比如 Turnstile、极验 v3 滑块、ALTCHA 或图片验证码,插件都看不到,所以请在同一个脚本中、紧挨着插件调用,用 capskip SDK 来处理。
Puppeteer 能通过 Cloudflare 整页检查吗?
可以。对于嵌入在表单中的小组件,把 sitekey 和当前 URL 传给 solver.turnstile(),然后填写 cf-turnstile-response。整页检查还需要挑战暴露出的 data 和 pagedata 字符串。其结果中带有签发该 token 时所用的 userAgent,所以提交前请用 page.setUserAgent 切换到它。
仅靠 puppeteer-extra-plugin-stealth 能避开验证码吗?
它能降低验证码出现的频率,但不能杜绝。Stealth 补丁会隐藏那些把无头 Chrome 标记为自动化的信号,可网站仍然可能抛出验证挑战,而那个挑战需要真正的答案。用 Stealth 减少弹出次数,用 CapSkip 处理剩下的那些。
在 Puppeteer 中处理 reCAPTCHA v3 有什么不同?
没有要填写的小组件,只有一个分数。调用 solver.recaptcha() 时把 version 设为 v3,并传入网站交给 grecaptcha.execute 的 action 字符串,然后把 token 随页面原本要发出的请求一起发送。Google 根据 IP 信誉和浏览器信号为 v3 token 打分,当网站要求高分时,干净的代理就很重要。
CapSkip 扩展能在无头 Puppeteer 中运行吗?
可以,在 Chrome 的新版无头模式下(自 Puppeteer 22 起为默认模式)以及有窗口模式下都可以。旧版的 headless shell 完全不支持扩展。无论哪种方式,扩展都需要 CapSkip 应用在运行。SDK 和 puppeteer-extra 方式没有这个限制,因为两者都不需要浏览器来完成识别。

让每次 Puppeteer 运行都能越过验证码

在你的 Node.js 项目旁边安装 CapSkip,保留现有插件或加上 npm 客户端,下一个验证挑战就只需一次 await 调用,而不是一个卡住的标签页,月费依旧不变。