reCAPTCHA v2
与 CapMonster Cloud

解密验证码、部署到站点并进行端到端测试。

reCAPTCHA V2解决方案的定价

验证码
价格 (USD)
$ 0.60
1000 代币
接手一个已经部署 captcha 或其他防护的站点,却无法访问源代码?此时最关心的是使用了哪种方案、配置是否正确以及如何测试。

在本文中,我们尽量回答了所有关键问题。要开始解决问题,第一步是确定当前使用的是哪种防护系统。为此,您可以查看常见验证码与反机器人防护系统列表,其中提供了可视化示例和关键特征,帮助您快速判断自己正在使用哪一种方案。

如果您发现自己的网站使用的是 reCAPTCHA V2,下一步就是更深入地了解它的特性和具体工作方式。在本文中,您还可以查看 reCAPTCHA V2 的接入说明,以便彻底弄清它在您的网站上是如何运行的。这样一来,您不仅能更好地理解当前的防护机制,还可以更合理地规划后续的维护和支持。

什么是 Google reCAPTCHA v2
什么是 Google reCAPTCHA v2
reCAPTCHA v2 是 Google 提供的防护系统,用于阻止垃圾信息和其他可能危害网站的自动化操作。它帮助区分真实访客与机器人,从而保持站点安全稳定。
Background
reCAPTCHA V2 示例
reCAPTCHA v2
reCAPTCHA v2
最经典的勾选式验证码,用户需要勾选“我不是机器人”,有时还会弹出额外题目(例如选择特定图片)。
reCAPTCHA v2 Invisible
reCAPTCHA v2 Invisible
不可见版本,自动完成验证,无需用户点击。
reCAPTCHA v2 Enterprise
reCAPTCHA v2 Enterprise
面向企业的版本,包含更多安全与控制功能。

如何通过 CapMonster Cloud 解决 reCAPTCHA v2

测试包含 reCAPTCHA V2 的表单时,常常需要确认 captcha 是否集成正确并工作正常。

你可以手动验证站点上的 captcha。

  • 打开表单页面,确认 captcha 能够显示。
  • 尝试在不解题的情况下提交——服务器应返回错误。
  • 解题成功后,表单应顺利提交。

若想自动解题,可以使用 CapMonster Cloud 等服务,它会接收验证码参数、在服务器中解析并返回可直接使用的 token。把 token 注入表单即可无需人工操作通过验证。

通过 CapMonster Cloud API 工作的一般流程:

创建任务创建任务
arrow
发送 API 请求发送 API 请求
arrow
获取结果获取结果
arrow
将 token 应用到页面将 token 应用到页面
arrow
使用现成库解决 reCAPTCHA v2
CapMonster Cloud 提供适用于 PythonJavaScript(Node.js)和 C# 的 SDK,方便快速集成。
Python
JavaScript
C#
解题、插入 token 并提交表单
这是一个 Node.js 示例,涵盖网页端验证码解决的完整流程。你可以通过 HTTP 请求获取 HTML 和参数,发送答案并处理结果;或使用自动化工具(如 Playwright)打开页面、等待验证码、发送参数(可用于正确或错误场景),再通过 CapMonster Cloud 客户端获取结果、把 token 写入表单并查看最终状态。
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium


const { chromium } = require('playwright');
const { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2Request } = require('@zennolab_com/capmonstercloud-client');

(async () => {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();

  const TARGET_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high';
  const WEBSITE_KEY = '6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd';
  const CMC_API_KEY = 'your_capmonster_cloud_api_key';

  const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CMC_API_KEY }));

  await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded' });

  // 执行验证码求解
  const solution = await cmc.Solve(new RecaptchaV2Request({ websiteURL: TARGET_URL, websiteKey: WEBSITE_KEY }));
  const token = solution.solution.gRecaptchaResponse;

  // 将 token 写入并提交表单(替换为所需选择器)
  await page.evaluate((t) => {
    const ta = document.querySelector('textarea#g-recaptcha-response');
    if (ta) ta.value = t;
    document.querySelector('form.formular')?.submit();
  }, token);

  console.log('验证码已解决,表单提交成功!');
})();
如何将 reCAPTCHA v2 接入你的网站
想弄清验证码在站点上的运行方式、验证逻辑以及重新部署/配置的步骤,请查看本节内容。我们在此描述了完整的防护部署流程。

1. 前往 reCAPTCHA 管理控制台页面。

2. 注册一个新站点。

选择验证码类型——reCAPTCHA v2(勾选 + 任务或不可见版本)。

HowTo Connect image 1

3. 获取两组密钥:

  • Site key — 前端使用的公钥;
  • Secret key — 服务器验证用的私钥。

HowTo Connect image 2

在设置中可指定允许使用 reCAPTCHA 的域名或选择安全级别(从基础到最高)。

4. 客户端代码示例。 带 reCAPTCHA v2 的 HTML 表单(可直接粘贴到页面 body 中):

包含 reCAPTCHA v2 的 HTML 表单包含 reCAPTCHA v2 的 HTML 表单
arrow

5. 在服务器端校验结果。

PHP 示例PHP 示例
arrow
Background
可能的错误与调试
Bug Icon
站点或密钥无效
验证码未加载或返回 invalid-input-secret。
Bug Icon
求解超时
服务器未在规定时间收到答案,请延长等待时间。
Bug Icon
空 token
将结果写回页面时出现错误。
Bug Icon
Response success=false
token 已过期、被重复使用或被伪造。请开启请求日志并检查 Google 返回的 error-codes 字段。
验证防护的可靠性
集成完成后,务必确认系统确实能够抵御自动化行为。
安全与优化建议
仅在服务器端保存 <span class="font-bold">Secret Key</span>,不要将其暴露给客户端。
记录错误代码<span class="font-bold">(error-codes)</span>,以便了解具体校验失败的原因。
在表单底部添加指向<span class="font-bold">隐私政策</span>和<span class="font-bold">Google 使用条款</span>的链接,以满足许可要求。
结论

如果你接手了一个已经集成了验证码或其他防护系统的网站,但又无法访问其代码,也不用担心!要判断实际使用了哪种技术其实并不难。为了核实其是否正常工作,你可以在隔离的测试环境中使用CapMonster Cloud识别服务,确保令牌处理机制和校验逻辑都运行正常。

对于reCAPTCHA V2,只需识别出所用的系统,观察其行为,并确认防护是否正常工作即可。本文演示了如何识别 reCAPTCHA V2,以及到哪里查找其接入或重新配置的说明文档,从而帮助你自信地维护防护方案并掌控其运行情况。

Conclusion

关于 reCAPTCHA v2 的常见问题

要提交求解请求,请向 https://api.capmonster.cloud/createTask 发送 JSON POST 请求:

{
  "clientKey": "API_KEY",
  "task": {
    "type": "RecaptchaV2Task",
    "websiteURL": "[target_page_URL_with_reCAPTCHA]",
    "websiteKey": "[reCAPTCHA_website_key]"
  }
}
  • clientKey — 来自 CapMonster Cloud 账户的 API 密钥
  • task.type:设置为 RecaptchaV2Task
  • task.websiteURL:出现验证码的页面 URL
  • task.websiteKey:嵌入页面 HTML 的公开 sitekey

后续步骤请参阅reCAPTCHA 求解文档

使用上一问题中描述的参数,向 https://api.capmonster.cloud/createTask 提交任务。

使用 clientKey 和 taskId(在 createTask 响应中返回)轮询 https://api.capmonster.cloud/getTaskResult

当 status 字段为 ready 时,响应中包含 gRecaptchaResponse 字符串 — 这就是已求解的 token。

根据 reCAPTCHA v2 类型和网站架构,使用以下方法之一将 token 提交到目标网站:

  • 标准 DOM 注入:对于典型的复选框集成,将 token 注入隐藏文本区域(例如 document.getElementById("g-recaptcha-response").innerHTML = token;),使用 Playwright 的 page.evaluate()(或 Puppeteer/Selenium 的等效方法)。然后以编程方式调用 form.submit() 或触发提交按钮。
  • JavaScript 回调(隐形 reCAPTCHA):如果页面使用带回调的隐形验证码,在 data-callback 属性中识别函数名,并通过自动化脚本执行,将 token 作为参数传递(例如 onVerifyCallback("TOKEN_STRING"))。
  • 直接 HTTP 请求:要绕过浏览器渲染,拦截网站的原生提交请求,通过 HTTP 客户端将 token 直接作为表单数据的一部分发送到目标服务器后端(例如 g-recaptcha-response=TOKEN_STRING)。

目标服务器从您的提交中提取 token,并通过 Google 的 siteverify 端点进行验证。

CapMonster Cloud 使用相同的 API 调用处理两种模式。对于隐形模式,在 createTask 请求中包含 isInvisible: true 参数。要正确确认 reCAPTCHA 求解结果,请确定网站提交 token 的方式。这些方法在上一问题中有说明。

最常见的原因是 token 已被使用或已过期 — reCAPTCHA v2 token 为一次性且生命周期短,任何延迟或重复提交都会触发此问题。首先记录来自 https://www.google.com/recaptcha/api/siteverify 的原始 HTTP 响应 — 该响应中的 error-codes 数组是主要的诊断信号。

另外两个常见原因:invalid-input-secret 表示后端传递了错误的密钥,而服务器端空的 g-recaptcha-response 字段通常意味着前端 token 注入在表单提交前静默失败。

还请验证传递给 CapMonster Cloud 的 websiteURL 与 Google 验证 token 的 origin 完全匹配 — 不匹配会导致域名绑定错误。

对于非技术用户:使用 CapMonster Cloud 浏览器扩展(Chrome/Firefox)。可直接在页面上测试验证码行为并实时观察求解过程。安装扩展、添加 API 密钥并打开受 reCAPTCHA 保护的页面。

对于 QA 和 DevOps:执行简单的三步测试:

  1. 在未求解验证码的情况下提交表单 — 应返回 success: false
  2. 使用已求解的验证码提交表单 — 请求应成功通过。
  3. 运行负载测试(k6 或 JMeter,100+ RPS)并验证过期或重复使用的 token 被正确拒绝(例如 HTTP 403)。

重要:siteverify 始终返回 HTTP 200 — 错误由 success 字段决定,而非 HTTP 状态码。