🧪 Skills
captcha-base-skill
免费优先的验证码基础能力 Skill。默认本地识别,复杂场景可切换低价云码兜底。适用于 OpenClaw/ClawHub、浏览器自动化与 RPA 场景。
v1.0.10
Description
name: captcha-skill description: 免费优先的验证码基础能力 Skill。默认本地识别,复杂场景可切换低价云码兜底。适用于 OpenClaw/ClawHub、浏览器自动化与 RPA 场景。
验证码基础能力 Skill
这是一个面向公共场景的验证码基础能力 Skill,目标很直接:
- 常见验证码,优先用本地免费能力解决
- 本地不稳或题型复杂时,再切到低价云码兜底
- 让调用方尽量只关心“要识别什么”,而不是先研究一堆接口细节
它更适合被当成一个公共底层能力来用,而不是单一网站的定制脚本。
给 Agent 的最短说明
如果你是另一个 Skill 或 Agent,请先按下面规则使用:
- 默认入口用
JfbymClient.solve_auto_fallback(...) - 简单文本、算术、基础滑块,默认
prefer="free" - 点选、九宫格、空间推理、旋转、ReCaptcha、hCaptcha,优先直接走付费接口
- 输入支持三种形式:文件路径、
bytes、base64 字符串 - 成功结果优先读取返回值里的
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、base64back_image_input/slide_image_input:文件路径、bytes、base64extra:复杂点选/推理类场景的文字提示paid_captcha_type:覆盖默认云码类型
输出约定
- 自动策略接口:统一返回外层结构
task/mode/result/fallback_reason - 本地文本识别:返回
str - 本地算术识别:返回
dict - 本地滑块识别:返回
dict或int - 云码接口:返回云码原始
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_angle 和 slide_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/slideimage_input:text、math任务必填。支持文件路径、bytes、base64back_image_input、slide_image_input:slide任务必填charset_range: 文本任务可选。可限制字符集paid_captcha_type: 可选。覆盖默认云码 typeextra: 可选。透传给收费solve_commonprefer:free或paid,默认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(...):返回strsolve_local_text_captcha_with_range(...):返回strsolve_local_math_captcha(...):返回dictdetect_local_text_boxes(...):返回listsolve_local_slide_distance_ddddocr(...):返回dictsolve_local_slide_distance(...):返回int
收费云码接口返回
solve_common(...):返回云码接口datasolve_slide(...):返回云码接口datasolve_recaptcha(...):返回可提交 tokenget_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)
No comments yet. Be the first to share your thoughts!