EveryInfra

reCAPTCHA 九宫格识图(只识别,不过盾)

reCAPTCHA 九宫格识图(只识别,不过盾)Google九宫格图片 + 一个题目标识进,命中的格子序号出(只识别,不过盾)勾完「我不是机器人」之后弹出的图片题:一张被划成 3×3 或 4×4 的图,题面写「请选择所有包含红绿灯的图片」,点完再点「验证」。

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

接口规格

项目
typerecaptcha_grid
必填参数bodyquestion
可选参数
返回一组坐标点solution.objects
怎么用这个解命中的格子位置
价格$0.69 / 1K 次 —— 按成功计费,没解出来退款
厂商文档Google 官方文档

参数去页面哪里取

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

先切 frame:勾选框在 iframe[src*="api2/anchor"],图片题在另一个 iframe —— iframe[src*="api2/bframe"]。DevTools 控制台顶部的 frame 下拉要切到 bframe,自动化里用 page.frames().find(f=>f.url().includes('api2/bframe')),不切到就什么都查不到。

  • 整张题图是一个 <img>,不是九个:3×3 用 img.rc-image-tile-33,4×4 用 img.rc-image-tile-44,动态题里换上来的那一格是 img.rc-image-tile-11。它的 src 形如 https://www.google.com/recaptcha/api2/payload?p=…&k=<sitekey>
  • 题面文字:.rc-imageselect-desc-wrapperinnerText(换行要压成一行);只要物体名时读 .rc-imageselect-desc-no-canonical strong.rc-imageselect-desc strong
  • 格子节点 table.rc-imageselect-table-33 td.rc-imageselect-tile(4×4 换成 -44),验证按钮 #recaptcha-verify-button,最终 token 落在宿主页的 textarea#g-recaptcha-response

在 bframe 里跑这一行,图和题一次拿全(bframe 本身就在 google.com 上、与题图同源,所以 canvas 不会被跨域污染):

(()=>{const i=document.querySelector('img.rc-image-tile-33,img.rc-image-tile-44,img.rc-image-tile-11');const c=document.createElement('canvas');c.width=i.naturalWidth;c.height=i.naturalHeight;c.getContext('2d').drawImage(i,0,0);return{grid:i.className.match(/tile-(\d\d)/)[1],text:document.querySelector('.rc-imageselect-desc-wrapper').innerText.replace(/\n/g,' '),src:i.src,b64:c.toDataURL('image/jpeg').split(',')[1]}})()
  • question 传的不是那句英文,是知识图谱 MID,形如 /m/015qffDOM 里没有这个值,要从题面英文物体名映射:/m/015qff 红绿灯、/m/0k4j 汽车、/m/01bjv 公交车、/m/02yvhj 校车、/m/0pg52 出租车、/m/04_sv 摩托车、/m/0199g 自行车、/m/014xcs 人行横道、/m/01pns0 消防栓、/m/015kr 桥、/m/019jd 船、/m/015qbp 停车计时器、/m/01lynh 楼梯、/m/0cdl1 棕榈树、/m/09d_r 山丘、/m/01jk_4 烟囱、/m/013xlm 拖拉机。
  • 想让题面稳定是英文(映射表才对得上),把脚本地址锁成 https://www.google.com/recaptcha/api.js?hl=en

调用示例

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

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

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

只做图像分类 —— 告诉你哪几格命中了题目里的物体。**不产出可提交的 `g-recaptcha-response`**:点格子、等动态图刷新、点验证按钮、取 token,全部仍由调用方在自己的浏览器里完成。

容易搞混的

reCAPTCHA v2(端到端过盾、直接给 token)、reCAPTCHA v3(无交互打分,根本没有图片题)、hCaptcha 九宫格(长得像,但那是 hCaptcha 自己的题库,DOM 与流程完全不同)。

去看 reCAPTCHA v2 那一条 →

常见部署场景

已知的坑

这条不过盾。recaptcha_v2 的分工:那条给页面 URL 和 sitekey,端到端交付一个能填进表单的 token,中间过程你不用管;这条只回「哪几格命中」,点格子、翻动态图、点验证、取 g-recaptcha-response 全是你自己的事。什么时候要这条:① 你本来就在真浏览器里跑(Playwright / Selenium / RPA),会话、Cookie、代理、指纹都是自己的,只缺「看图」这一步 —— 换成端到端过盾会带来另一套环境,反而把你正在用的会话作废;② token 与求解环境绑定,你需要保留自己的出口 IP 与浏览器指纹;③ 单价差一个量级,量大时只买「看图」更划算;④ 你要把点击混进自己的行为轨迹、或需要逐步可审计。

返回的是从左上角起、行优先、0 基的序号数组。

动态 3×3 一次调用解不完:点掉一格后那一格会淡入一张新图(img.rc-image-tile-11),要对新图再问一次,直到没有命中为止。

`question` 必填且必须是 MID,传 "traffic lights" 这种英文字符串不成立。

4×4 是「把一张大图按格子切」的分割题(同一个物体跨好几格),3×3 是「每格一张独立照片」的分类题;两者视觉相似,但答案含义不同,别混着理解。

不锁英文,题面会随浏览器 Accept-Language 变成中文/日文等,MID 映射表直接失效。

与 reCAPTCHA v2 不是一回事:那条直接交付可提交的 token,这条只做图像识别、交付要点哪几格,适合你自己驱动浏览器的场景

常见问题

reCAPTCHA 九宫格识图(只识别,不过盾) 要传哪些参数?

必填 body、question,没有可选参数。请求里 type 传 recaptcha_grid。

解出来的东西怎么用?

返回一组坐标点,取 solution.objects。命中的格子位置

img.rc-image-tile-33 要去页面的哪里找?

重点找 img.rc-image-tile-33、img.rc-image-tile-44、img.rc-image-tile-11。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。

怎么确认目标站用的就是 reCAPTCHA 九宫格识图(只识别,不过盾)?

reCAPTCHA v2(端到端过盾、直接给 token)、reCAPTCHA v3(无交互打分,根本没有图片题)、hCaptcha 九宫格(长得像,但那是 hCaptcha 自己的题库,DOM 与流程完全不同)。

有什么容易踩的坑?

这条不过盾。recaptcha_v2 的分工:那条给页面 URL 和 sitekey,端到端交付一个能填进表单的 token,中间过程你不用管;这条只回「哪几格命中」,点格子、翻动态图、点验证、取 g-recaptcha-response 全是你自己的事。什么时候要这条:① 你本来就在真浏览器里跑(Playwright / Selenium / RPA),会话、Cookie、代理、指纹都是自己的,只缺「看图」这一步 —— 换成端到端过盾会带来另一套环境,反而把你正在用的会话作废;② token 与求解环境绑定,你需要保留自己的出口 IP 与浏览器指纹;③ 单价差一个量级,量大时只买「看图」更划算;④ 你要把点击混进自己的行为轨迹、或需要逐步可审计。

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

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

开始接入

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