🧪 Skills

jfbym-captcha-skill

免费优先的验证码基础能力 Skill。默认本地识别,复杂场景可切换低价云码兜底。适用于 OpenClaw/ClawHub、浏览器自动化与 RPA 场景。

v1.0.7
❤️ 0
⬇️ 85
👁 1
Share

Description


name: captcha-skill description: 免费优先的验证码基础能力 Skill。默认本地识别,复杂场景可切换低价云码兜底。适用于 OpenClaw/ClawHub、浏览器自动化与 RPA 场景。

验证码基础能力 Skill

这是一个面向公共场景的验证码基础能力 Skill,目标很直接:

  • 常见验证码,优先用本地免费能力解决
  • 本地不稳或题型复杂时,再切到低价云码兜底
  • 让调用方尽量只关心“要识别什么”,而不是先研究一堆接口细节

它更适合被当成一个公共底层能力来用,而不是单一网站的定制脚本。

给 Agent 的最短说明

如果你是另一个 Skill 或 Agent,请先按下面规则使用:

  1. 默认入口用 JfbymClient.solve_auto_fallback(...)
  2. 简单文本、算术、基础滑块,默认 prefer="free"
  3. 点选、九宫格、空间推理、旋转、ReCaptcha、hCaptcha,优先直接走付费接口
  4. 输入支持三种形式:文件路径、bytes、base64 字符串
  5. 成功结果优先读取返回值里的 result 或云码接口 data

最常用入口:

  • 文本:solve_auto_fallback(task="text", image_input=...)
  • 算术:solve_auto_fallback(task="math", image_input=...)
  • 滑块:solve_auto_fallback(task="slide", back_image_input=..., slide_image_input=...)
  • 复杂题型:solve_common(...) / solve_slide(...)

如果你只需要模块选择:

  • 只要本地免费能力:local_captcha.py
  • 只要云码 SDK:jfbym_sdk.py
  • 想自动兜底、保留兼容入口、或直接用 CLI:jfbym_api.py

云端与隐私说明

这部分请在调用前明确理解:

  • 本地免费能力不需要 JFBYM_TOKEN
  • JFBYM_TOKEN 仅在调用云端收费接口时使用,是可选项,不是本 Skill 的必填前置条件
  • 云端兜底平台为云码 JFBYM:https://console.jfbym.com/register/TG133710
  • 一旦启用云端兜底,传入的图片数据和 JFBYM_TOKEN 会发送到 https://api.jfbym.com
  • 代码中包含固定 developer_tag,用于渠道归因

如果你的场景对隐私更敏感:

  • 只使用本地免费能力
  • 不设置 JFBYM_TOKEN
  • 不把非验证码敏感图片传给云端接口

调用边界摘要

  • 本地模式:不上传图片,不需要 token
  • 云端模式:会把调用时传入的图片发送到 https://api.jfbym.com
  • 云端模式:会发送 JFBYM_TOKEN(如果已配置)
  • 不读取其他系统凭据
  • 不修改系统配置
  • 不要求常驻运行

适合谁

  • 需要验证码基础能力的 OpenClaw / ClawHub Skill 作者
  • 做浏览器自动化、RPA、数据采集的人
  • 想先免费解决大部分简单场景,再为复杂题型保留便宜兜底的人

核心定位

  • 免费优先:文本、算术、基础滑块可先走本地能力
  • 低价兜底:复杂场景可接云码 API,按量付费
  • 开发友好:支持文件路径、bytes、base64,适合脚本和二次封装
  • 场景覆盖广:文本、算术、滑块、点选、旋转、空间推理、ReCaptcha/hCaptcha

什么时候用哪种方式

场景 推荐策略 原因
4-6 位文本验证码 免费优先 本地 OCR 往往够用,零成本
简单算术验证码 免费优先 本地识别后可直接算结果
常见双图滑块 免费优先 ddddocr / OpenCV 可先跑
点选、九宫格、空间推理 直接付费 本地通用能力不稳定,直接走云码省时间
旋转、轨迹验证 直接付费 题型偏复杂,云码成功率更稳
ReCaptcha / hCaptcha / Turnstile 直接付费 属于典型云端令牌场景

一句话:

  • 简单题,先免费
  • 复杂题,直接低价兜底
  • 不确定时,就用 solve_auto_fallback

快速开始

1. 安装依赖

pip install -r requirements.txt

2. 最推荐的用法:自动策略

from jfbym_api import JfbymClient

client = JfbymClient()  # 不配 token 也能先跑免费分支

ret = client.solve_auto_fallback(
    task="text",
    image_input="captcha.png",
    charset_range="0123456789",
)

print(ret)

默认 prefer="free",也就是:

  • 先走本地免费能力
  • 免费失败时,若已配置 JFBYM_TOKEN,再自动走付费兜底

返回结构固定优先看这几个字段:

{
  "task": "text|math|slide",
  "mode": "free|paid",
  "result": ...,
  "fallback_reason": "..."  # 仅在发生兜底时存在
}

3. 命令行直接跑

文本验证码:

python jfbym_api.py text --image captcha.png --charset 0123456789

算术验证码:

python jfbym_api.py math --image math.png

双图滑块:

python jfbym_api.py slide --background back.png --slide slide.png

如需优先走付费兜底:

python jfbym_api.py text --image captcha.png --prefer paid

输出默认为 JSON,方便给其他 Skill 或 Agent 继续处理。

猜你该用哪个 captcha_type

python jfbym_api.py guess --description "九宫格点选"

查余额:

python jfbym_api.py balance

返分:

python jfbym_api.py report-error --unique-code 打码返回的uniqueCode

输入与输出约定

输入约定

  • image_input:文件路径、bytes、base64
  • back_image_input / slide_image_input:文件路径、bytes、base64
  • extra:复杂点选/推理类场景的文字提示
  • paid_captcha_type:覆盖默认云码类型

输出约定

  • 自动策略接口:统一返回外层结构 task/mode/result/fallback_reason
  • 本地文本识别:返回 str
  • 本地算术识别:返回 dict
  • 本地滑块识别:返回 dictint
  • 云码接口:返回云码原始 data

Agent 调用建议:

  • 自动策略返回时,优先读 ret["result"]
  • 云码接口返回时,优先读 ret.get("data") 或按题型字段读取
  • 不要假定所有付费题型返回结构完全一致

免费能力(本地)

适合优先降本,覆盖常见简单验证码。无需 token

支持能力

  • 通用文本识别:solve_local_text_captcha(image_input)
  • 字符集约束识别:solve_local_text_captcha_with_range(image_input, charset_range=...)
  • 算术验证码识别:solve_local_math_captcha(image_input)
  • 文本框检测:detect_local_text_boxes(image_input)
  • 滑块匹配(ddddocr):solve_local_slide_distance_ddddocr(back, slide)
  • 滑块匹配(OpenCV):solve_local_slide_distance(back_base64, slide_base64)

适用建议

  • 纯数字、纯字母、简单字母数字混合:优先免费
  • 简单算术题:优先免费
  • 常见双图滑块:优先免费
  • 干扰严重、点选、旋转、空间推理:通常直接走云码更省时间

免费本地示例

from jfbym_api import JfbymClient

text = JfbymClient.solve_local_text_captcha("captcha.png")
math_ret = JfbymClient.solve_local_math_captcha("math.png")
slide_ret = JfbymClient.solve_local_slide_distance_ddddocr("back.png", "slide.png")

低价兜底能力(云码 API / JFBYM)

适合复杂验证码或高成功率场景。仅在调用云端接口时需要 token

平台主页:

透明说明

  • 这是我推荐的低价兜底渠道,不影响免费功能使用
  • 你完全可以只用本地免费能力,不注册、不充值也没问题

注册链接:

为什么我愿意推荐它

  • 价格低,适合作为“偶尔才用一次”的兜底渠道
  • 很多验证码场景本来就不高频,通常不需要高额充值
  • 文本、算术、基础滑块本来就可以先走本地免费,只有复杂题型才建议付费

token 配置

export JFBYM_TOKEN="你的云码token"

Windows PowerShell:

$env:JFBYM_TOKEN="你的云码token"

常见复杂题型

价格来源:https://www.jfbym.com/price.html(日期:2026-03-12)

场景 推荐 type 低至价格 推荐接口 关键说明
空间推理点选(无确定按钮) 50009 0.012元 solve_common 如:点击侧对着你的字母
空间推理点选(有确定按钮) 30340 0.01元 solve_common 如:点击正方体上面字母的小写字母
文字点选(通用) 30100 0.01元 solve_common 按顺序点击需求文字
推理拼图 30108 0.008元 solve_common 交换 2 个图块
九宫格点选 30008 0.01元 solve_common 9 宫格图片验证
双图滑块(收费兜底) 20111 0.01元 solve_slide 2 个或多个缺口的滑块场景
轨迹验证/单图滑块优化 22222 0.008元 solve_common 返回坐标或偏移相关结果
单图旋转 90007 按官网/定制 solve_common 通用旋转验证码
双图旋转 90004 0.01元 solve_common 内圈、外圈图片旋转验证
双图旋转(高频场景) 90015 按官网/定制 solve_common 返回 rotate_angleslide_px
问答题 50103 0.016元 solve_common 看图问答

说明:价格与活动可能随时间变化,最终请以官网实时页面为准。

推荐调用策略

方案 A:大多数人最适合

  • 文本:先 solve_auto_fallback(task="text", ...)
  • 算术:先 solve_auto_fallback(task="math", ...)
  • 滑块:先 solve_auto_fallback(task="slide", ...)

方案 B:你已经明确知道是复杂题型

  • 点选、空间推理、旋转、ReCaptcha、hCaptcha
  • 直接走云码接口,减少本地重试

典型场景

场景 1:登录页数字验证码

from jfbym_api import JfbymClient

client = JfbymClient()
ret = client.solve_auto_fallback(
    task="text",
    image_input="captcha.png",
    charset_range="0123456789",
)

场景 2:算术验证码

from jfbym_api import JfbymClient

ret = JfbymClient.solve_local_math_captcha("math.png")
print(ret["result"])

场景 3:双图滑块

from jfbym_api import JfbymClient

client = JfbymClient()
ret = client.solve_auto_fallback(
    task="slide",
    back_image_input="back.png",
    slide_image_input="slide.png",
)

场景 4:九宫格 / 空间推理 / 点选

from jfbym_api import JfbymClient

client = JfbymClient()
ret = client.solve_common(
    image_input=image_b64,
    captcha_type="30008",
    label_image=label_image_b64,
)

场景 5:不确定该走哪个付费 type

python jfbym_api.py guess --description "点击所有朝向左边的字母"

自动策略接口

统一入口:

  • solve_auto_fallback(task, image_input=None, back_image_input=None, slide_image_input=None, charset_range=None, paid_captcha_type=None, extra=None, prefer="free")

参数说明

  • task: 必填。支持 text / math / slide
  • image_input: textmath 任务必填。支持文件路径、bytes、base64
  • back_image_inputslide_image_input: slide 任务必填
  • charset_range: 文本任务可选。可限制字符集
  • paid_captcha_type: 可选。覆盖默认云码 type
  • extra: 可选。透传给收费 solve_common
  • prefer: freepaid,默认 free

返回结构

{
  "task": "text|math|slide",
  "mode": "free|paid",
  "result": ...,
  "fallback_reason": "..."  # 仅在发生兜底时存在
}

示例

from jfbym_api import JfbymClient

client = JfbymClient()

text_ret = client.solve_auto_fallback(
    task="text",
    image_input="captcha.png",
    charset_range="0123456789",
)

math_ret = client.solve_auto_fallback(
    task="math",
    image_input="math.png",
)

slide_ret = client.solve_auto_fallback(
    task="slide",
    back_image_input="back.png",
    slide_image_input="slide.png",
)

进阶:直接调用云码接口

通用单图接口

ret = client.solve_common(
    image_input=image_b64,
    captcha_type="30100",
    extra="猫,狗,车",
)

双图滑块接口

ret = client.solve_slide(
    slide_image="slide.png",
    bg_image="back.png",
    captcha_type="20111",
)

双图旋转(90015)

ret = client.solve_common(
    image_input=None,
    out_ring_image=out_ring_b64,
    inner_circle_image=inner_circle_b64,
    captcha_type="90015",
)

rotate_angle = ret.get("data", {}).get("rotate_angle")
slide_px = ret.get("data", {}).get("slide_px")

识别结果说明

免费本地接口返回

  • solve_local_text_captcha(...):返回 str
  • solve_local_text_captcha_with_range(...):返回 str
  • solve_local_math_captcha(...):返回 dict
  • detect_local_text_boxes(...):返回 list
  • solve_local_slide_distance_ddddocr(...):返回 dict
  • solve_local_slide_distance(...):返回 int

收费云码接口返回

  • solve_common(...):返回云码接口 data
  • solve_slide(...):返回云码接口 data
  • solve_recaptcha(...):返回可提交 token
  • get_balance():返回积分余额
  • report_error(unique_code):返回是否退款成功
  • guess_captcha_type(description):返回推荐 type

安全与边界

  • 本地免费能力不会上传图片到第三方 API
  • 使用云码兜底时,图片会提交到第三方服务,请自行评估场景敏感度
  • 建议不要把它用于含有敏感隐私信息的整页截图上传场景
  • 调用方最好自己控制失败重试次数,避免无意义消耗

依赖建议

  • 建议在虚拟环境或隔离环境中安装依赖
  • ddddocr、OpenCV、Pillow、numpy 这类图像处理依赖体积可能较大
  • 如果你只打算使用本地免费能力,先完成依赖安装再测试
  • 如果你只打算接入云码 SDK,仍建议先在受控环境中验证网络调用与返回结构

开源致谢

本 Skill 的本地免费能力基于开源项目 ddddocr 构建,感谢作者与社区贡献。

支持与反馈

如果这个 Skill 对你有帮助,欢迎:

  • 在 ClawHub 给它点个星标,能帮助更多人看到它
  • 遇到问题时提交 issue 或直接反馈复现信息、错误样例、题型截图
  • 分享你的使用场景,方便我继续优化免费能力和兜底策略

说明:

  • 星标、反馈和真实案例都很重要,公共基础能力只有在被持续使用时才有维护价值
  • 如果后续你有 GitHub 仓库,建议把这里补成正式的 Issues 链接

项目结构

captcha-base-skill/
├── SKILL.md
├── requirements.txt
├── local_captcha.py   # 本地免费能力
├── jfbym_sdk.py       # 云码 SDK
└── jfbym_api.py       # 统一门面 + 自动兜底 + CLI

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs