如何在 Patchright 自动化中接入 CAPTCHA Solver

Patchright 能控制 Chromium 页面,但浏览器自动化本身不会生成 CAPTCHA 响应。本教程最关键的问题不是"如何重复提交",而是先确认 SDK 是否能读取验证码组件所在的 JavaScript 环境。
在实测的 Patchright 1.64.1 环境中,默认 isolated_context=True 的求值无法读取 window.___grecaptcha_cfg;切换到页面主环境后可以读取。通过一个小型适配器,仅把 CapSolver Core SDK 的 evaluate 调用转发到主环境,官方 SDK 成功检测到本地 Google 测试组件,并返回 reCaptchaV2、测试页面 URL 和公开 site key。
环境安装
bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install "patchright==1.64.1" "capsolver-core==0.1.1"
python -m patchright install chromium
检测阶段不需要 CapSolver API key。真正解题需要有效凭据和账户资源,密钥应从应用的安全配置读取,不能写进代码仓库。
主环境适配器
python
class MainWorldPage:
def __init__(self, page):
self._page = page
@property
def url(self):
return self._page.url
async def evaluate(self, expression, arg=None):
return await self._page.evaluate(expression, arg, isolated_context=False)
async def wait_for_selector(self, selector, **kwargs):
return await self._page.wait_for_selector(selector, **kwargs)
导航、定位器和页面生命周期仍由原始 raw_page 管理;只有传给 SDK 的对象使用适配器。这样不会修改 Patchright 安装文件,也不会把所有浏览器操作改到主环境。
解题调用与验证边界
配置 API key 后,官方浏览器模式调用为:
python
results = await cap.solve_on_page(page)
这行代码在原文中保持官方形式,但本次没有 API key,因此没有实测付费解题、token 回填或目标应用验收。实际接入时要逐项检查 error、solution 和 filled,随后执行应用原本需要的表单操作,并等待由你自己的系统定义的成功信号。
filled=True 只说明完成回填,不代表表单已提交,也不代表后端接受了验证码。检测、解题、回填和应用成功必须分别记录。
常见问题
- 组件可见但检测为空:确认 SDK 收到的是
MainWorldPage,并检查组件是否已初始化。 - 测试组件超时:检查 Chromium 是否能加载 Google 脚本。
- SDK 返回错误:核对凭据、挑战类型和当前页面参数,避免无条件重试。
- 回填后流程不继续:检查表单动作、回调和应用自己的成功或拒绝状态。
只在自有或明确授权的页面使用此方案,不把它用于指纹规避或访问第三方受限系统。官网原文与 canonical:待官网发布后补入。