Playwright 验证码识别工具:在 Node.js 和 Python 中绕过验证码
Playwright 测试用例和爬虫不再卡在 reCAPTCHA、Turnstile、极验 v3 或图片验证码上。从 Node.js 或 Python SDK 中 await 一个 token,或者让扩展通过验证。每次识别都在你自己的机器上运行。
- Node.js 和 Python SDK
- 支持所有 Playwright 引擎
- 不按次收费
- 打开 /signup
- 填写表单
- 识别验证码
- submit
4 项通过0 项被拦截Playwright 验证码识别工具补上了 Playwright 唯一无法脚本化的那一步:它的 locator 能点击、输入和自动等待,却没有一个能生成 reCAPTCHA、Cloudflare Turnstile 或扭曲文字图片所要求的答案。CapSkip 在与你的测试并行运行的桌面应用中生成答案,运行在你掌控的 Windows 电脑或 VPS 上。遇到验证的测试用例或爬取任务会继续执行,而不是一直等到超时,所有识别都包含在一份统一月费授权中。
Playwright 的两大语言阵营都得到支持。TypeScript 和 JavaScript 项目添加 capskip npm 包,在 locator 调用之间 await 它的 Promise;Python 项目在 sync_playwright 中使用 CapSkip,在 async_playwright 中使用 AsyncCapSkip,二者方法名相同。识别只是向应用发送一个普通的 HTTP 请求,从不操作浏览器,因此同一个辅助函数在 Chromium、Firefox 和 WebKit 项目中都能使用。CapSkip 支持的所有类型都向 Playwright 开放:reCAPTCHA v2、v3 和 Enterprise,Turnstile 小组件和挑战页面,极验 v3 滑块,ALTCHA、CaptchaFox、Capy、Friendly Captcha 和 AWS WAF CAPTCHA,以及数千种扭曲文字图片。
playwright-recaptcha 这类音频转写辅助工具,只在 Google 继续提供音频挑战时才有效,而一旦 IP 看起来可疑,音频挑战往往就会消失;真正的 token 并不依赖这扇门。已经接入 2Captcha、Anti-Captcha 或 CapSolver 的测试套件也可以保留这些调用,因为应用会在本地响应相同的 API。
不想手动接入 token? 启动一个加载了 CapSkip 扩展的持久化 Chromium 上下文,有头模式或新版 headless 实现均可,当你的测试等待下一个 locator 时,挑战就会在页面内被通过。扩展与正在运行的 CapSkip 应用通信,所以请保持应用开启。 阅读扩展指南
Playwright 项目能从 CapSkip 获得什么
TypeScript 和 Python 客户端
npm install capskip 提供一个带类型定义、基于 Promise 的客户端;pip install capskip 提供用于 sync_playwright 的 CapSkip 和用于 async_playwright 的 AsyncCapSkip,二者方法名相同。
一个辅助函数适配所有浏览器项目
SDK 向 CapSkip 应用发送 HTTP 请求,从不操作浏览器,所以同一个识别辅助函数可以服务你的 chromium、firefox 和 webkit 项目,无需分支处理。
用 page.evaluate 回写 token
通过 locator 读取 sitekey,连同 page.url 一起传给 recaptcha() 或 turnstile(),然后把答案写入隐藏的响应字段,如果小组件有回调函数,再触发它。
只在出现挑战时才识别
每次导航后给小组件的 locator 设一个较短的超时,只有当它解析成功时才调用识别工具。没有验证码的页面保持 Playwright 的正常速度。
每个测试 worker 都有余量
Playwright Test 在并行 worker 上运行测试用例,每个 worker 都可以同时识别。没有线程上限,授权按统一价格收费,所以增加 worker 永远不会让账单变大。
2Captcha 和 CapSolver 调用照常工作
围绕 2Captcha、Anti-Captcha 或 CapSolver 构建的测试套件无需改动。在 CapSkip 模拟器中选择该服务,并在它的 Hosts file 一行点击 Add。此后,由你自己的机器而不是付费队列来响应它的请求。
在 Playwright 中绕过验证码的三种方式
from playwright.sync_api import sync_playwright
from capskip import CapSkip
solver = CapSkip(host="127.0.0.1", port=8080)
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://example.com/login")
sitekey = page.get_attribute(".g-recaptcha", "data-sitekey")
token = solver.recaptcha(sitekey=sitekey, url=page.url)["code"]
page.evaluate(
"t => document.getElementById('g-recaptcha-response').innerHTML = t", token
)
page.click("button[type=submit]")Python 搭配 sync_playwright:读取 reCAPTCHA sitekey,从 127.0.0.1 上的 CapSkip 获取 token,写入页面,然后提交。
在持久化 Chromium 中使用扩展
完全不需要识别代码:Playwright 启动加载了 CapSkip 扩展的 Chromium,由扩展在页面中通过小组件。同一个扩展也能在日常使用的 Chrome 和 Firefox 中运行。
Node.js、Python 和 .NET SDK
在 TypeScript 或 Python 中,每种验证码类型只需 await 一次调用;在 Playwright for .NET 下则使用 .NET 客户端。每个结果返回时都可以直接注入。
为现有代码提供本地 API
现有的 2Captcha 风格请求由应用来响应,所以旧的测试用例照常运行。Playwright for Java 或任何其他语言绑定,都可以直接调用 HTTP API。
用 Playwright 脚本对准一个真实小组件
我们的 reCAPTCHA v2 演示加载的是真正的 Google 小组件。把你的 Playwright 脚本指向它,运行识别步骤,确认表单接受了 token,再去处理你自己的目标网站。
三步设置 Playwright 验证码识别工具
-
把应用装在可访问的机器上
在 Windows 上把 CapSkip 安装在测试运行器旁边,或安装在你的 CI 任务能通过网络访问的任意 VPS 上,然后启动它,让它空闲等待第一个识别请求。 下载 Windows 安装程序
-
用授权或试用登录
订阅后,登录信息会通过邮件发送给你;在应用中输入即可。想先测试的话,试用提供 3 天、500 次识别,限一台设备,无需银行卡。 开始免费试用
-
把识别步骤接入你的测试
安装 npm 或 pip 包,把客户端封装进一个辅助函数或 fixture,在任何可能出现挑战的地方调用它。方法名和选项详见 SDK 页面。 打开 SDK 指南
在 Playwright 测试套件中,CapSkip 与按次计费 API 对比
下表列出当识别从付费 API 转移到你自己的机器上时,Playwright 测试套件会发生哪些变化。
| 功能 | CapSkip | 2Captcha & API 服务 |
|---|---|---|
| 如何付费 | 无限量识别,统一价格每月 35 美元起 | 按每千次识别扣除额度,每次运行都在增加 |
| 识别在哪里进行 | 在你掌控的 Windows 主机或 VPS 上 | 在服务商的云端,或由付费的人工完成 |
| Playwright 语言 | Node.js 和 Python SDK、.NET 客户端、本地 HTTP API | 他们的客户端库加一个 API 密钥 |
| 并行测试 worker | 没有线程上限,只受你的硬件限制 | 并发限制或额外费用 |
| 为 2Captcha 编写的测试用例 | 通过内置模拟器继续运行 | 被锁定在该 API 及其预付余额上 |
| 图片验证码返回时间 | 约 0.1 秒,无需经过互联网往返 | 每次识别都有网络和排队延迟 |
| 挑战数据 | 从不离开识别所在的机器 | 每次都上传到外部服务 |
想先试用一下?
开始 3 天免费试用,在你自己的目标上识别 500 个任意类型的验证码。
相关验证码识别工具与指南
如何在 Playwright 中处理验证码:分步指南
首先决定识别放在哪里。Playwright 提供两个干净的位置:在浏览器内通过 CapSkip 扩展,或在测试代码中通过 SDK。两者都支持 Node.js 和 Python,同一个代码仓库可以在合适的地方分别使用。
在浏览器内。启动一个加载扩展的持久化 Chromium 上下文,使用有头模式或 Chromium 的新版 headless 模式,因为旧版 headless shell 不支持扩展。一旦 reCAPTCHA、Turnstile 或极验 v3 小组件渲染出来,扩展就会发现它,并在你的下一个 locator 等待期间完成识别。对于图片验证码,只需在扩展中标记一次图片及其输入框。
在你的代码中。用 locator 从小组件上取出 sitekey,连同 page.url 一起发给 SDK,然后用 page.evaluate 设置网站读取的隐藏字段:reCAPTCHA 是 g-recaptcha-response,Turnstile 是 cf-turnstile-response。如果页面声明了小组件回调,就调用它,然后提交。Google 的 reCAPTCHA token 有效期大约两分钟,所以应在提交前一刻识别,而不是在测试开头。
让干净的页面保持快速。每次导航后,给小组件的 locator 设一个较短的超时,什么都没出现就跳过识别。需要登录的测试套件可以在 setup 项目中识别一次登录挑战,保存 storageState,之后的每个测试都以已登录状态开始。
从付费服务迁移过来?在运行 CapSkip 的机器上,在模拟器设置中选择 2Captcha 或 Anti-Captcha,然后点一下,让应用把该服务写入 Windows hosts 文件。你的 Playwright 调用保持原样,所有受支持的验证码都在本地识别。
相关指南: Patchright 验证码 · Camoufox 验证码 · Crawlee 验证码
如何在不编写识别代码的情况下在 Playwright 中绕过验证码?
哪些 Playwright 浏览器可以与 CapSkip 配合使用?
它适合有大量并行 worker 的 Playwright Test 吗?
我能在 Playwright 中识别隐形 reCAPTCHA 和 reCAPTCHA v3 吗?
headless 模式会导致 CapSkip 无法工作吗?
如何让 Playwright 通过 Cloudflare Turnstile?
我的 Playwright 测试套件能保留 2Captcha 或 Anti-Captcha 调用吗?
单靠 playwright-recaptcha 或 stealth 补丁就够了吗?
让你的 Playwright 测试全部绿灯通过
安装 CapSkip,加一个识别步骤或装上扩展,过去卡在挑战上的测试用例就能一路跑到最后一个断言。一份统一月费套餐,无限量识别。
