EveryInfra

图形验证码识别(图片 → 文字)

图形验证码识别(图片 → 文字)(不是某一家的产品,是题型)图像识别(图片 → 文字)一张扭曲变形的字符图片,旁边一个输入框,让你把看到的字打进去。常配一个「换一张」的刷新按钮。这是最老派的一种验证码。

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

接口规格

项目
typeimage
必填参数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=?」「苹果是什么颜色」),没有图;这一条是给一张图、读出图上的字符。判据就一个:有没有图

去看 文字问答验证码 那一条 →

常见部署场景

已知的坑

「识别对了但提交说错」几乎总是 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 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。

开始接入

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