WeBan:用 Python 自动刷完大学安全微课的题库型工具
项目速览:围板。 _WeBan_ 为 dddddocr answer/answer.json PR 1 加星标。
秒懂
- 它是什么?
- WeBan 是一个面向大学安全教育平台的自动学习与考试脚本,用题库匹配和验证码识别完成课程与考试。它的价值在于多账号并发与题库共享,但依赖平台接口的稳定性,且题库质量决定考试上限。
- 适合谁用?
- 适合需要批量处理多个账号、且愿意维护题库的大学辅导员或学生组织。不适合对平台接口变动敏感、或不愿接受 GPL-3.0 传染性的人。
- 能商用吗?
- 可以,但有条件。GPL-3.0 是 copyleft 许可证:如果你分发包含它的软件,就必须以同一许可证公开该软件的源代码。只在内部运行、不对外分发,则不会触发这项义务。
- 还在维护吗?
- 在维护。仓库最近一次提交在 2 天前。
- 用什么语言写的?
- 主要是 Python(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月17日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决的是重复点击的体力活
大学安全教育平台通常要求学生在限定时间内看完视频、做完考试。WeBan 针对这类平台写了一个自动化脚本,核心是两件事:自动遍历课程结构并模拟学习行为,以及根据题库自动答题。它面向的是需要处理多个账号的人,比如辅导员要替全班学生完成学习任务,或者学生想省下重复点击的时间。仓库描述里明确写了支持多用户多线程运行,这意味着它不是单账号的小工具,而是设计给批量场景的。项目用 Python 编写,但发布时打包成各平台二进制,用户不需要安装 Python 环境。
题库是核心资产,也是最大的不确定性
WeBan 的考试功能依赖一个本地题库文件 answer/answer.json。运行前后程序会自动合并题库,也就是说每次学习或考试后,新遇到的题目会被记录进去。项目鼓励用户把 answer.json 提交 PR 来完善题库,这是一个众包机制。但这里有个明显的边界:题库匹配率决定了考试能否交卷,config.toml 里有 exam_submit_match_rate 这个键,默认值 README 没写,但逻辑是匹配率低于阈值就不交卷。如果题库覆盖不全,未匹配的题目可以选择随机作答或手动输入。这个设计把质量责任推给了用户,题库越全,考试越稳,但初始使用时可能匹配率很低,需要先跑几轮积累。
验证码识别:OpenCV 滑块,失败才转手动
登录时有滑块验证码,课程中有点选验证码。WeBan 用 OpenCV 做图像识别,课程点选验证码采用 2 轮 × 3 次的策略,失败后才转手动输入。这里没有用深度学习模型,而是传统的图像处理,好处是依赖轻量,坏处是对复杂验证码的鲁棒性有限。README 提到 numpy 1.26 和 OpenCV 4.10 的版本锁定,是为了兼容无 AVX2 的 QEMU 虚拟 CPU,说明作者考虑过在低配云服务器上运行。但验证码识别始终是猫鼠游戏,平台一旦更换验证码样式,这个模块就可能失效。
配置系统:三套名称一一对应
每个配置项都有三种表达方式:config.toml 里的 snake_case 键、命令行参数 --kebab-case、环境变量 WB_SNAKE_CASE。例如 study_time 对应 --study-time 和 WB_STUDY_TIME。优先级是命令行大于环境变量大于配置文件。这种设计让无交互运行变得容易,你可以在 Docker 或 cron 里用环境变量传入账号,避免把密码写进命令行历史。README 给了一个例子:WB_TENANT_NAME、WB_USERNAME、WB_PASSWORD 三个环境变量设置后直接运行二进制。数据目录用 --data-dir 指定,config、logs、answer 都放在那里,方便持久化挂载。这个配置体系比大多数同类脚本清晰,但第一次使用时需要理解三套名称的对应关系,文档里用表格列出来了,还算直观。
多账号并发与进度监控的取舍
max_workers 控制多账号最大并发数,默认值没写,但支持多线程同时执行。这里有个平衡问题:并发太高可能触发平台的风控,太低又浪费资源。README 没有给出建议值,用户需要自己试。进度监控方面,完课后会自动检查进度是否更新,未更新则警告提示,这个功能很实用,因为平台有时会漏记学习时长。但警告只是提示,不会自动重试,所以用户仍需要人工介入。断点续考模式(exam_mode 设为 perfect)允许一次未满分后再次考试,这依赖平台允许多次考试的规则,如果平台限制考试次数,这个功能就没意义。
运行方式:二进制下载即用,也支持源码
官方推荐的方式是去 Releases 页面下载对应系统的二进制文件。Windows 用户双击 exe,Mac 用户需要先 chmod +x 和 xattr -cr 解除隔离,Linux 直接运行。第一次运行会交互式输入学校、学号、密码,程序自动验证并保存到 config.toml。如果不想交互,可以用环境变量一次性传入。还有 --non-interactive 参数,用于 Docker 或 cron 环境,程序会根据环境变量 ENVIRONMENT=docker 或 stdin 非 TTY 自动判定。仓库本身是 Python 项目,所以你也可以从源码运行,但 README 没有提供 pip install 或 requirements.txt 的细节,这部分信息被截断了。
维护成本与许可证风险
项目最近一次推送是 2026 年 8 月,版本号到 v3.10.1,说明维护活跃。但活跃维护不等于稳定,平台接口一变,脚本就要跟着改。依赖锁定在 numpy 1.26 和 OpenCV 4.10,这能保证兼容性,但也意味着不会轻易升级,新功能可能受限于旧依赖。许可证是 GPL-3.0,这意味着如果你修改了代码并分发,必须开源你的修改。对于只想使用的个人来说没影响,但如果学校或公司想内部部署并二次开发,可能需要考虑许可证义务。另外,这类自动化工具可能违反平台的服务条款,使用前需要自己评估风险。
替代方案:手动浏览器自动化与题库众包
一个直接的替代方案是使用通用浏览器自动化框架,比如 Selenium 或 Playwright,自己写脚本模拟点击。区别在于 WeBan 已经封装了验证码识别、题库匹配和进度监控,而通用框架需要你从零实现这些。另一个替代是纯手动操作,但那就失去了工具的意义。还有一种思路是只做题库众包,不写自动化,比如用问卷星收集题目,然后人工对照答题。WeBan 的独特之处是把题库和自动化绑定在一起,题库通过 PR 机制持续增长。如果你不想依赖 WeBan 的维护者,可以考虑自己用 Playwright 写一个针对特定平台的脚本,但需要处理验证码,工作量大很多。
编辑结论
适合需要批量处理多个账号、且愿意维护题库的大学辅导员或学生组织。不适合对平台接口变动敏感、或不愿接受 GPL-3.0 传染性的人。使用前先确认你的学校平台是否在 WeBan 支持列表内,并检查 config.toml 中 exam_submit_match_rate 的默认值,避免低匹配率交卷导致挂科。首次运行务必开启 debug 模式观察请求日志,确认滑块验证码识别流程是否正常。若平台升级接口或增加人机验证,WeBan 可能立即失效,你需要自行跟进 release 更新。
社区笔记