使用 Playwright 通过点击方式解决 reCAPTCHA V2
此仓库演示了如何结合 reCAPTCHA solver、Playwright 库和 2Captcha 服务,自动化处理基于图片的 reCAPTCHA challenge(3x3 或 4x4 网格)。脚本会以编程方式与 reCAPTCHA 交互,提取 challenge,提交到 2Captcha 进行处理,然后按返回结果模拟人工点击。
如果你使用 Python,我们也提供了一个基于 Python 和 Selenium 的类似示例。你可以在名为 reCAPTCHA Solver Using 2Captcha and Selenium 的仓库中找到它。
安装与使用
要使用此脚本,请先克隆仓库、安装依赖并运行示例:
# Clone the repository
git clone git@github.com/2captcha/playwright-recaptcha-solver-using-grid.git
cd playwright-recaptcha-solver-using-grid
# Install dependencies
npm install
# Run the script
npm run start
配置
要使用此脚本,你需要配置 2Captcha API key。请按如下方式设置 APIKEY 环境变量:
export APIKEY=your_api_key
另外,你也可以直接在代码中设置
APIKEY。做法是修改captchaSolver.js文件第 7 行的 API key 值。找到设置 API key 的那一行,并将当前值替换为你的真实 key。这样适合快速测试,或者在无法使用环境变量时使用。不过在生产环境中,出于安全考虑,仍然建议使用环境变量。
你可以在自己的 2Captcha 账户 中获取 API key。
工作原理
此脚本使用 Grid 方法来解决 reCAPTCHA。流程如下:
- 提取 challenge:提取原始 captcha 图片及相关参数。
- 将数据发送到 2Captcha:把图片数据发送到 2Captcha,由其使用 grid 方法完成识别。
- 按结果执行点击:收到包含目标单元格编号的结果后,Playwright 脚本会与 reCAPTCHA 小组件交互,并点击指定单元格。随后点击“Verify”按钮以完成 challenge。
提取脚本成功返回的示例:
{
rows: 3,
columns: 3,
type: 'GridTask',
comment: 'Select all images with crosswalks Click verify once there are none left',
body: 'iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0...'
}
reCAPTCHA 识别完成后的返回示例:
{ status: 1, data: 'click:3/6/8', id: '77704464585' }
在返回值 click:3/6/8 中,数字表示需要点击哪些单元格。返回 click:3/6/8 的意思是,你需要点击编号为 3、6 和 8 的 captcha 方格。编号从左上角开始。下方截图展示了 click:3/6/8 对应的实际点击位置。
通常要成功通过 captcha,大约需要处理 1–5 个 challenge,但在更复杂的情况下,任务数可能会更多。
这种方式的优点
- 无需处理 Token:不需要手动管理或注入 token 到网页中。你只需要模拟人工点击正确区域。
- 逻辑更简单:直接利用 reCAPTCHA 自带的校验流程,简化了 token 处理逻辑。
这种方式最大的优点是,你不需要研究如何把 token 应用到页面上。只要点击正确的方格,再点击验证按钮,后续的 reCAPTCHA 校验逻辑就会按内置流程自动完成。
通过 token 方式处理 reCAPTCHA 可能会明显更复杂。出于安全原因,网站可能会使用额外参数,例如 datas,或者实现复杂的 token 校验逻辑。在这类场景下,如果站点有意提高 token 方案的接入难度,那么这种点击式方案会更适合。
这种方式的缺点
- 实现更复杂:需要更多代码,也需要更多时间处理交互细节。
- 成本和速度不固定:captcha 的识别成本和耗时会随图片 challenge 的复杂度而变化。
- 依赖浏览器自动化:要确保 reCAPTCHA 代码正常工作,必须依赖浏览器自动化。自动化流程会补齐应用 reCAPTCHA token 所需的逻辑,从而保证整个流程可以正常运行。
可能出现的错误
- "ERROR_CAPTCHA_UNSOLVABLE":有时 captcha 对 2Captcha 来说过于困难,服务会直接返回错误。建议实现对应的错误处理逻辑,例如重试或升级处理。
- 被 reCAPTCHA 封锁:如果同一 IP 发起过多尝试,reCAPTCHA 可能会暂时封锁请求。这种情况下,可以尝试更换 IP,或者等待几分钟后再试。当你被 reCAPTCHA 临时封禁时,会收到如下提示:
Try again later. Your computer or network may be sending automated queries. To protect our users, we can't process your request right now...
如果需要更换 IP,可以使用 residential proxy 服务。
计划中的功能
- 自动处理 captcha 更新后图片刷新的情况。
- 使用 CSS 选择器代替绝对坐标,以实现更可靠的点击。
- 改进错误处理,尤其是针对 "ERROR_CAPTCHA_UNSOLVABLE"。