Install
openclaw skills install captcha-base-skillClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
免费优先的验证码基础能力 Skill。默认本地识别,复杂场景可切换低价云码兜底。适用于 OpenClaw/ClawHub、浏览器自动化与 RPA 场景。
openclaw skills install captcha-base-skill这是一个面向公共场景的验证码基础能力 Skill,目标很直接:
它更适合被当成一个公共底层能力来用,而不是单一网站的定制脚本。
如果你是另一个 Skill 或 Agent,请先按下面规则使用:
JfbymClient.solve_auto_fallback(...)prefer="free"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.pyjfbym_sdk.pyjfbym_api.py这部分请在调用前明确理解:
JFBYM_TOKENJFBYM_TOKEN 仅在调用云端收费接口时使用,是可选项,不是本 Skill 的必填前置条件JFBYM_TOKEN 会发送到 https://api.jfbym.comdeveloper_tag,用于渠道归因如果你的场景对隐私更敏感:
JFBYM_TOKENhttps://api.jfbym.comJFBYM_TOKEN(如果已配置)bytes、base64,适合脚本和二次封装| 场景 | 推荐策略 | 原因 |
|---|---|---|
| 4-6 位文本验证码 | 免费优先 | 本地 OCR 往往够用,零成本 |
| 简单算术验证码 | 免费优先 | 本地识别后可直接算结果 |
| 常见双图滑块 | 免费优先 | ddddocr / OpenCV 可先跑 |
| 点选、九宫格、空间推理 | 直接付费 | 本地通用能力不稳定,直接走云码省时间 |
| 旋转、轨迹验证 | 直接付费 | 题型偏复杂,云码成功率更稳 |
| ReCaptcha / hCaptcha / Turnstile | 直接付费 | 属于典型云端令牌场景 |
一句话:
solve_auto_fallbackpip install -r requirements.txt
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": "..." # 仅在发生兜底时存在
}
文本验证码:
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_reasonstrdictdict 或 intdataAgent 调用建议:
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)solve_local_slide_distance_ddddocr(back, slide)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")
适合复杂验证码或高成功率场景。仅在调用云端接口时需要
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 | 看图问答 |
说明:价格与活动可能随时间变化,最终请以官网实时页面为准。
solve_auto_fallback(task="text", ...)solve_auto_fallback(task="math", ...)solve_auto_fallback(task="slide", ...)from jfbym_api import JfbymClient
client = JfbymClient()
ret = client.solve_auto_fallback(
task="text",
image_input="captcha.png",
charset_range="0123456789",
)
from jfbym_api import JfbymClient
ret = JfbymClient.solve_local_math_captcha("math.png")
print(ret["result"])
from jfbym_api import JfbymClient
client = JfbymClient()
ret = client.solve_auto_fallback(
task="slide",
back_image_input="back.png",
slide_image_input="slide.png",
)
from jfbym_api import JfbymClient
client = JfbymClient()
ret = client.solve_common(
image_input=image_b64,
captcha_type="30008",
label_image=label_image_b64,
)
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",
)
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(...):返回 intsolve_common(...):返回云码接口 datasolve_slide(...):返回云码接口 datasolve_recaptcha(...):返回可提交 tokenget_balance():返回积分余额report_error(unique_code):返回是否退款成功guess_captcha_type(description):返回推荐 type本 Skill 的本地免费能力基于开源项目 ddddocr 构建,感谢作者与社区贡献。
如果这个 Skill 对你有帮助,欢迎:
说明:
captcha-base-skill/
├── SKILL.md
├── requirements.txt
├── local_captcha.py # 本地免费能力
├── jfbym_sdk.py # 云码 SDK
└── jfbym_api.py # 统一门面 + 自动兜底 + CLI