EveryInfra

BotDeflector

BotDeflectorBotdeflector一张挑战图进,一组要点击的坐标出挂在登录、注册、联系表单或结账流程旁边的验证组件:先在后台算一小会儿,再让用户在图上按要求点几个图标;通过后组件产出一个校验凭证,随表单一起提交,站点后端再回调它的接口验签。

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

接口规格

项目
typebotdeflector
必填参数body
可选参数
返回一组坐标点solution.points
怎么用这个解要点击的坐标
价格$2.36 / 1K 次 —— 按成功计费,没解出来退款
厂商文档Botdeflector 官方文档

参数去页面哪里取

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

它没有公开的 DOM 属性名或脚本 URL 文档(见 gotchas),所以最可靠的判据是资源域名:组件静态资源在 challenge.botdeflector.eu,接口在 api.botdeflector.eu —— 两个子域 2026-08-30 实测都解析且在线(静态域返 S3 风格的 AccessDenied,接口域对未知路径返 404,都说明主机真实存在)。

判断一个页面用没用它,一行:

[...new Set([...document.scripts].map(s=>s.src).concat(performance.getEntriesByType('resource').map(e=>e.name)))].filter(u=>/botdeflector/i.test(u))

取挑战图(含原图与显示尺寸,用于把坐标换算回屏幕):

[...document.querySelectorAll('img,canvas')].map(e=>({cls:e.className,natural:[e.naturalWidth||e.width,e.naturalHeight||e.height],shown:[e.clientWidth,e.clientHeight],data:e.tagName==='CANVAS'?e.toDataURL():e.src}))

组件常渲染在 shadow DOM 里,上面那行扫不到就穿透一层:

[...document.querySelectorAll('*')].flatMap(e=>e.shadowRoot?[...e.shadowRoot.querySelectorAll('img,canvas')]:[]).map(n=>n.tagName==='CANVAS'?n.toDataURL():n.src)

图去掉 data:image/...;base64, 前缀和换行,放 body

调用示例

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

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

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

把一次浏览器端计算(工作量证明)与一道图标点选题组合起来,通过后签发 JWT 形式的校验 token。我们这条**只做那道点选题的识别**并交付坐标;点击、拿 token、提交表单都在调用方手上。

容易搞混的

Friendly Captcha、ALTCHA、captcha.eu 等欧洲 privacy-first 验证码 —— 同样主打 GDPR 与工作量证明,但各是各家、DOM 与凭证字段完全不同;不能按「欧洲 + PoW」就当成同一个东西。

去看 Friendly Captcha 那一条 →

常见部署场景

已知的坑

本能力交付的是坐标,你拿到之后自己去点。 它另有直接交付 token 的形态,本接口不覆盖那一种。

官方文档目前极简:只有一页概览讲「加组件 → 用户完成挑战 → 拿 token → 后端验签」,getting-started / migrate 等子页 2026-08-30 实测全部返回 404。没有公开的 DOM 属性名、脚本 URL 或 token 字段名,上面那条资源域名判据是实测得到的,不是文档给的。

官方明确写「不使用 cookie、不存储终端用户个人数据」,所以别按 cookie 名去找它 —— 找资源域名和表单里那个 JWT 形式的隐藏字段。

坐标原点在图片左上角、单位是你提交那张图的像素;页面缩放过要按 clientWidth / naturalWidth 换算。

挑战与会话绑定:坐标点对了但会话已过期照样不通过 —— 别把挑战图缓存下来隔很久再用。

它属于「欧洲 privacy-first + 工作量证明」这一大类里的新面孔,这一类里各家的 DOM 与 token 完全不同,不要按同类推断参数名。

本能力交付的是坐标,你拿到之后自己去点。BotDeflector 另有直接交付 token 的形态,本接口不覆盖那一种

常见问题

BotDeflector 要传哪些参数?

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

解出来的东西怎么用?

返回一组坐标点,取 solution.points。要点击的坐标

challenge.botdeflector.eu 要去页面的哪里找?

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

怎么确认目标站用的就是 BotDeflector?

Friendly Captcha、ALTCHA、captcha.eu 等欧洲 privacy-first 验证码 —— 同样主打 GDPR 与工作量证明,但各是各家、DOM 与凭证字段完全不同;不能按「欧洲 + PoW」就当成同一个东西。

有什么容易踩的坑?

本能力交付的是坐标,你拿到之后自己去点。 它另有直接交付 token 的形态,本接口不覆盖那一种。

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

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

开始接入

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