Ornold
返回博客
指南8 分钟阅读

指纹浏览器中的自动验证码处理:实用指南

逐步说明 Ornold 如何识别 sitekey、判断验证码类型,并同时向多个浏览器配置文件注入 token。
2026年4月5日

为什么 CAPTCHA 在反检测工作流中不同

在普通浏览器中,您解决一次 CAPTCHA 然后继续。在反检测自动化中,CAPTCHA 同时出现在数十个浏览器配置文件上——每个都有自己的会话、cookies 和指纹。逐个解决它们会失去并行自动化的意义。
Ornold 将 CAPTCHA 解决处理为批量操作:检测所有活跃会话中的挑战类型,提取 sitekey,将其发送给求解器,并注入响应令牌——全部在一个协调的过程中完成。

支持的 CAPTCHA 类型

Ornold 检测并解决现代网站上最常见的挑战类型:
  • reCAPTCHA v2 — 经典的"我不是机器人"复选框和图像网格挑战
  • reCAPTCHA v3 — 在后台运行的隐形基于分数的验证
  • hCaptcha — 图像分类挑战("选择所有摩托车的图像")
  • Cloudflare Turnstile — 在许多网站上替代 reCAPTCHA 的非交互式挑战
  • 自定义挑战 — 按住按钮、滑块谜题和其他交互式验证
求解器根据在页面上检测到的内容自动选择正确的方法。您无需指定 CAPTCHA 类型——只需调用 `browser_solve_captcha()`,Ornold 会自动处理。

求解管道如何工作

CAPTCHA 求解过程有四个阶段。每个阶段都在所有活跃浏览器会话中并行运行。

阶段 1 — 检测

Ornold 扫描每个活跃浏览器会话以查找已知的 CAPTCHA 模式。它检查:
  • reCAPTCHA iframe 和脚本标签(`google.com/recaptcha`)
  • hCaptcha 容器和 API 脚本(`hcaptcha.com`)
  • Turnstile 小部件(`challenges.cloudflare.com`)
  • 自定义挑战元素(按住按钮、滑块轨道)
检测通过 DOM 检查进行,必要时进行视觉分析。如果 CAPTCHA 隐藏在覆盖层后面或动态加载,视觉回退会捕获它。
// 调用 solve 时自动进行检测 const result = await browser_solve_captcha(); // result 显示哪些会话有 CAPTCHA 及其类型 // { total: 20, detected: 18, solved: 18, failed: 0 }

阶段 2 — Sitekey 提取

每个 CAPTCHA 小部件都绑定到一个 sitekey——一个公开标识符,告诉 CAPTCHA 提供商哪个网站正在请求验证。Ornold 自动从页面 DOM 中提取此密钥。
对于 reCAPTCHA,sitekey 位于小部件 div 的 `data-sitekey` 属性中或脚本 URL 参数中。对于 hCaptcha,它位于类似的属性中。对于 Turnstile,它嵌入在 Cloudflare 脚本配置中。
sitekey 与页面 URL 一起发送到求解服务。这是使解决方案有效的原因——令牌是为该特定网站和密钥组合生成的。

阶段 3 — 令牌生成

Ornold 将 sitekey 和页面 URL 发送到 CAPTCHA 求解服务(2captcha)。该服务返回响应令牌——证明挑战已完成的字符串。
求解时间因 CAPTCHA 类型而异:
  • reCAPTCHA v2 — 15-45 秒(需要图像识别)
  • reCAPTCHA v3 — 5-15 秒(基于分数,无图像)
  • hCaptcha — 15-60 秒(取决于难度等级)
  • Turnstile — 5-20 秒(通常比基于图像的挑战更快)
令牌为所有会话并行生成。如果 20 个浏览器需要求解,所有 20 个请求同时发出。总等待时间大约与求解一个相同。

阶段 4 — 令牌注入

令牌到达后,Ornold 将其注入页面。注入方法取决于 CAPTCHA 类型:
  • reCAPTCHA v2/v3 — 设置 `g-recaptcha-response` textarea 值并调用回调函数
  • hCaptcha — 设置 `h-captcha-response` 字段并触发验证回调
  • Turnstile — 将令牌注入 Turnstile 响应字段并分派成功事件
注入后,Ornold 可选择点击提交按钮或等待页面自动前进。CAPTCHA 小部件消失,表单继续进行,就像人类解决了它一样。
// 完整的 solve + verification 流程 await browser_parallel_navigate({ url: "https://target.example/signup" }); await browser_parallel_fill({ ref: "email", values: emails }); // 解决所有会话中的 CAPTCHA const result = await browser_solve_captcha(); console.log(`已解决: ${result.solved}/${result.total}`); // 提交表单 await browser_parallel_click({ ref: "submit" }); // 验证成功 await browser_parallel_wait_for({ text: "Account created", timeoutMs: 15000 });

处理按住按钮挑战

某些网站使用需要按住按钮数秒的自定义挑战。这些无法通过令牌注入解决——需要实际的鼠标交互。
Ornold 在视觉上检测按住挑战并模拟交互:在按钮上按下鼠标,保持所需时间,然后释放。这在所有活跃会话中并行工作。
// 按住挑战检测和求解 const captchaCheck = await browser_detect_press_hold(); if (captchaCheck.detected) { await browser_solve_press_hold(); // 等待按住时间,然后释放 }

实践中的批量 CAPTCHA 求解

以下是在账户注册流程中在 30 个 Linken Sphere 会话中进行真实 CAPTCHA 求解运行的样子:
  • 将所有 30 个会话导航到注册页面
  • 使用每个配置文件的数据填充表单字段(唯一的电子邮件、名称等)
  • 调用 `browser_solve_captcha()` — Ornold 在 28 个会话中检测到 reCAPTCHA v2,在 2 个会话中检测到 Turnstile
  • 所有 30 个求解请求并行发出
  • 令牌在 15-40 秒内返回
  • Ornold 注入令牌并在每个会话上点击提交
  • 30 个中有 29 个成功。1 个会话获得二级挑战——Ornold 自动重试

求解后验证

解决 CAPTCHA 只是工作的一半。您需要验证解决方案已被接受且页面已前进。Ornold 为此提供了工具:
// 验证所有会话已通过 CAPTCHA const status = await browser_status(); // 检查哪些会话在预期页面上 await browser_parallel_wait_for({ text: "Welcome", timeoutMs: 10000 }); // 如果某些会话卡住,截图进行诊断 await browser_parallel_screenshot();
如果会话未通过验证,您可以仅为该会话重试求解,或将其标记为手动审查。关键是尽早捕获失败,而不是在长工作流程结束时发现它们。

CAPTCHA 积分和计费

每次 CAPTCHA 求解都会消耗您 Ornold 账户中的一个积分。当求解服务返回令牌时扣除积分——不是当您调用 solve 函数时。
  • 免费账户在完成入职培训后获得 5 个 CAPTCHA 积分
  • 付费计划包括基于您的等级的每月积分额度
  • 可以单独购买额外积分
  • 失败的求解(服务无法生成令牌的情况)不消耗积分
在运行大型批次之前检查 Ornold 仪表板上的积分余额。如果积分在批次中途用完,某些会话将有未解决的 CAPTCHA。

常见问题故障排除

  • «未检测到 CAPTCHA» — 页面可能动态加载挑战。在求解前添加等待:`await browser_parallel_wait_for({ selector: "iframe[src*=recaptcha]", timeoutMs: 10000 })`
  • «令牌被拒绝» — 令牌可能已过期(有效期约 2 分钟)。确保在求解前表单已准备好,以便您可以在之后立即提交。
  • «求解超时» — 求解服务过载或 CAPTCHA 类型异常困难。重试一次。如果问题仍然存在,检查 Ornold 仪表板上的服务状态。
  • «部分批次失败» — 某些会话已解决,其他未解决。使用 `browser_status()` 识别卡住的会话并仅重试这些。
  • «按住不工作» — 确保挑战元素可见且未被其他覆盖层覆盖。尝试先滚动到它。

最佳实践

  • 在求解 CAPTCHA 前填充表单。令牌在约 2 分钟内过期,因此最小化求解和提交之间的时间。
  • 求解后使用 `browser_status()` 验证所有会话已前进。不要假设成功。
  • 对于大型批次(50+ 会话),以 20-30 为一组求解,以避免压倒求解服务。
  • 监控您的积分余额。如果可用,在仪表板上设置警报。
  • 如果网站经常更改 CAPTCHA 提供商,使用自动检测流程而不是硬编码类型。

相关文章