图形验证码识别(图片 → 文字)
图形验证码识别(图片 → 文字) 是 (不是某一家的产品,是题型) 的图像识别(图片 → 文字)。一张扭曲变形的字符图片,旁边一个输入框,让你把看到的字打进去。常配一个「换一张」的刷新按钮。这是最老派的一种验证码。
接口规格
| 项目 | 值 |
|---|---|
| type | image |
| 必填参数 | body |
| 可选参数 | case_sensitivecharsetmath |
| 返回 | 一段文字(solution.text) |
| 怎么用这个解 | 识别出的文字 |
| 价格 | $0.83 / 1K 次 —— 按成功计费,没解出来退款 |
参数去页面哪里取
下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。
必填 body(图片的 base64)。可选 comment(给识别方的提示,比如「只有数字」「四位字母」)。
⚠⚠ 取图最容易踩的坑:必须带 session
验证码图片的答案存在服务端 session 里,不是存在图片里。所以:
· 用同一个 session(同一批 cookie)去请求图片和提交表单;
· 换一个 HTTP 客户端、或者中途丢了 cookie,你解出来的答案对应的是另一张图,
表现是「识别明明对了、提交却说验证码错误」。
· <img> 的 src 通常带一个随机参数(?r=0.123 / ?t=时间戳)用来防缓存 ——
那个参数是给浏览器看的,换掉它会拿到新的一张图、把上一张作废。
取图的两种方式
// ① 页面上已经渲染出来了,直接从 DOM 上的 img 元素转 base64(不发新请求,最稳)
const img = document.querySelector('img[src*="captcha"], img[src*="verify"], img[src*="code"]');
const c = document.createElement('canvas');
c.width = img.naturalWidth; c.height = img.naturalHeight;
c.getContext('2d').drawImage(img, 0, 0);
c.toDataURL('image/png').split(',')[1] // ← 这就是要传的 body② 服务端抓取时,用带 cookie 的同一个会话去 GET 图片 URL,把响应字节 base64。
⚠ base64 的两个格式要求
· 不能带 `data:image/png;base64,` 前缀 —— 只传逗号后面那一段;
· 不能带换行 —— 有些语言的 base64 编码器默认每 76 字符插一个换行(比如
Python 的 base64.encodebytes、命令行 base64 不加 -w 0),要去掉。
调用示例
一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。
curl -X POST https://api.everyinfra.com/api/v1/captcha \ -H "Authorization: Bearer omg_你的KEY" \ -H "Content-Type: application/json" \ -d '{"type":"image","body":"<body>"}'
{ "solution": { "text": "…" }, "billing": { "charged": true, "credits": 60 }}
怎么确认目标站用的就是它
服务端生成图片时把答案存进 **session**,图片本身不含答案。所以「拿到图」和「提交答案」必须是**同一个 session**——这一点决定了下面取图的做法。
容易搞混的
与 文字问答验证码(type text_captcha)不是一回事:那个是纯文本逻辑题(「3+5=?」「苹果是什么颜色」),没有图;这一条是给一张图、读出图上的字符。判据就一个:有没有图。
常见部署场景
- 老式论坛与 CMS:Discuz、phpBB、以及大量自建站的注册与发帖页
- 政务、教务、医院挂号这类内部系统的登录页
- 企业 OA 与后台管理系统
- 没有接第三方验证码、自己用 GD/PIL 画图的站点
已知的坑
「识别对了但提交说错」几乎总是 session 问题,不是识别错了。检查取图和提交是不是同一批 cookie。
刷新一次图,上一张就作废。别在解题过程中触发那个「换一张」按钮或重新请求 img。
base64 不能带 `data:` 前缀、不能带换行——命令行用 base64 -w 0(macOS 上是 base64 默认不换行,Linux 要加 -w 0)。
传 comment 显著提高准确率:告诉识别方「只有数字」「六位」「区分大小写」,比让它猜强。
图片限 JPG / GIF / PNG,100 字节 ~ 500KB
「在这组图里找出所有的猫」这类点选题不属于本能力
常见问题
图形验证码识别(图片 → 文字) 要传哪些参数?
必填 body;可选 case_sensitive、charset、math。请求里 type 传 image。
解出来的东西怎么用?
返回一段文字,取 solution.text。识别出的文字
base64.encodebytes 要去页面的哪里找?
重点找 base64.encodebytes、base64。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。
怎么确认目标站用的就是 图形验证码识别(图片 → 文字)?
与 文字问答验证码(type text_captcha)不是一回事:那个是纯文本逻辑题(「3+5=?」「苹果是什么颜色」),没有图;这一条是给一张图、读出图上的字符。判据就一个:有没有图。
有什么容易踩的坑?
「识别对了但提交说错」几乎总是 session 问题,不是识别错了。检查取图和提交是不是同一批 cookie。
多少钱一次,失败扣不扣?
$0.83 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。