EveryInfra

reCAPTCHA v2(勾选框 / 隐藏式)

reCAPTCHA v2(勾选框 / 隐藏式)Google勾选框 / 隐藏式经典的「我不是机器人」勾选框;勾完可能弹出九宫格图片题(选红绿灯、人行道那种)。隐藏式(invisible)则什么都不显示,只在右下角留一个 reCAPTCHA 徽章,提交时在后台跑。

正在查询可用性…$1.11 / 1K 次按成功计费,失败退款

接口规格

项目
typerecaptcha_v2
必填参数website_urlwebsite_key
可选参数invisibledata_spage_actionapi_domain
返回一个 token 字符串solution.gRecaptchaResponse
怎么用这个解填回目标站表单的 `g-recaptcha-response` 字段
价格$1.11 / 1K 次 —— 按成功计费,没解出来退款
厂商文档Google 官方文档

参数去页面哪里取

下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。

必填 website_url + website_key,可选 invisible

website_key(sitekey)

容器是一个带 g-recaptcha 类的 div,key 在 data-sitekey

<div class="g-recaptcha" data-sitekey="your_site_key"></div>

一行取:document.querySelector('.g-recaptcha').dataset.sitekey
显式渲染时在 grecaptcha.render(container, {sitekey: …, theme: …}) 的参数里;

兜底正则 document.documentElement.outerHTML.match(/6L[\w-]{38}/)(sitekey 实践中以 6L 开头、40 位)。

⚠ 先确认它真是 v2,别按 v3 提交

三者用的脚本长得很像:
· api.js(无 render 参数,或 render=explicit)+ 页面上有 .g-recaptchav2

· api.js?render=<40 位 key>v3(打分式,走 recaptcha_v3

· enterprise.jsEnterprise(走 recaptcha_v2_enterprise / recaptcha_v3_enterprise

控制台判定:typeof grecaptcha.enterprise 返回 "object" 就是 Enterprise。

⚠ 勾选框版还是隐藏式版 —— 这决定要不要传 `invisible`

· 容器上有 data-size="invisible" → 隐藏式
· g-recaptcha直接挂在提交按钮上<button class="g-recaptcha" data-sitekey=… data-callback=…>)→ 隐藏式的自动绑定写法

· 有 data-badgebottomright / bottomleft / inline)→ 隐藏式独有的配置项,勾选框版没有

· 以上都没有、页面上就是个方框 → 勾选框版

回填

表单字段名是 `g-recaptcha-response`(提交时作为 POST 参数带出去)。
⚠ Google 官方文档只写了字段名、没有写它是什么元素;实践中是一个隐藏 textarea,

grecaptcha.getResponse() 取更稳,别去猜 DOM 结构。

调用示例

一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。

请求
curl -X POST https://api.everyinfra.com/api/v1/captcha \  -H "Authorization: Bearer omg_你的KEY" \  -H "Content-Type: application/json" \  -d '{"type":"recaptcha_v2","website_url":"<website_url>","website_key":"<website_key>"}'
响应
{  "solution": {    "gRecaptchaResponse": "…"  },  "billing": { "charged": true, "credits": 80 }}

怎么确认目标站用的就是它

组件采集浏览器环境与行为信号换一个 token,站点后端拿 token 去 siteverify 校验。风险高时升级成图片题,让用户直接提供人类判断。

容易搞混的

三个方向都容易错:① reCAPTCHA v3 —— 同一个 api.js,区别只在 ?render=<sitekey>,v3 是打分无交互;② Enterprise —— 脚本换成 enterprise.js、命名空间是 grecaptcha.enterprise;③ hCaptcha —— 外观几乎一样,但脚本域是 hcaptcha.com、字段是 h-captcha-response

去看 reCAPTCHA v3 那一条 →

常见部署场景

已知的坑

别拿 v3 的页面按 v2 提交:判据是 script 上有没有 render=<key>。搞错的话 token 生成得出来、却在目标站校验不过。

隐藏式与勾选框式用同一个脚本 URL,光看脚本区分不出来,必须看 DOM(data-size / data-badge / 类挂在按钮上)。

Google 已把这一页标为弃用、指向 Cloud Fraud Defense。老站点仍在大量使用,但新站点越来越多直接上 Enterprise —— 遇到解不了先确认是不是 Enterprise。

显式渲染时官方要求 onload 回调必须在 reCAPTCHA 脚本加载之前定义,否则有竞态。这解释了为什么有些页面上 grecaptcha 存在但组件没渲染出来。

隐藏式 v2 和 v3 在页面上长得一样。分不清就两个都试一次,错的那次会以 422 明确报错,不会扣费

常见问题

reCAPTCHA v2(勾选框 / 隐藏式) 要传哪些参数?

必填 website_url、website_key;可选 invisible、data_s、page_action、api_domain。请求里 type 传 recaptcha_v2。

解出来的东西怎么用?

返回一个 token 字符串,取 solution.gRecaptchaResponse。填回目标站表单的 g-recaptcha-response 字段

recaptcha_v2_enterprise 要去页面的哪里找?

重点找 recaptcha_v2_enterprise、recaptcha_v3_enterprise、recaptcha_v3。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。

怎么确认目标站用的就是 reCAPTCHA v2(勾选框 / 隐藏式)?

三个方向都容易错:① reCAPTCHA v3 —— 同一个 api.js,区别只在 ?render=<sitekey>,v3 是打分无交互;② Enterprise —— 脚本换成 enterprise.js、命名空间是 grecaptcha.enterprise;③ hCaptcha —— 外观几乎一样,但脚本域是 hcaptcha.com、字段是 h-captcha-response

有什么容易踩的坑?

别拿 v3 的页面按 v2 提交:判据是 script 上有没有 render=<key>。搞错的话 token 生成得出来、却在目标站校验不过。

多少钱一次,失败扣不扣?

$1.11 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。

开始接入

一个端点覆盖全部验证码类型,按成功计费,失败与空结果一律退款。