Skip to content

Repository files navigation

WeBan 安全微课 安全微伴 大学安全教育

介绍

如果本项目帮到了你,可以在右上角点亮 Star,谢谢你!

实现了课程学习和根据题库自动考试,支持多用户多线程运行,自动验证码识别等。

运行前后会自动合并题库,如果一次没满分可以再考一次。可将 answer/answer.json 文件提交 PR 一起完善题库。

功能特性

  • 课程学习:自动遍历项目 → 分类 → 课程,模拟翻页、答题、等待学习时长后完课;按项目交替完成课程与考试
  • 自动考试:基于题库自动答题,支持单选/多选,未匹配题目可随机作答或手动输入
  • 验证码识别:登录滑块验证码自动识别;课程点选验证码自动识别(OpenCV,2 轮 × 3 次),失败才转手动
  • 多账号并发:支持配置多个账号,可多线程同时执行
  • 题库同步:考试前后自动从服务器同步题库,支持多用户共享
  • 断点续考:追求满分模式下,一次未满分可再次考试
  • 进度监控:完课后自动检查进度是否更新,未更新则警告提示
  • 调试模式:开启 debug 可查看完整请求/响应日志
  • 无交互运行:Docker / cron / 后台环境自动无交互,数据目录持久化
  • 低配兼容:numpy 1.26 + OpenCV 4.10 锁定,兼容无 AVX2 的 QEMU 虚拟 CPU(便宜 1H1G 云服务器可跑)

使用

零基础三步上手:① 下载二进制文件 → ② 双击/命令行运行 → ③ 输入学校、学号、密码。不需要安装 Python,不需要写代码。

⭐ 快速开始(推荐:下载即用)

第 1 步:下载你的系统对应的文件

点这里打开最新版下载页 → Releases,按自己的电脑系统下载(不确定系统就按下面的表选):

你的电脑点击下载(GitHub)下载太慢用镜像
Windows(绝大多数电脑)WeBan-windows-x64.exe镜像
Mac 苹果电脑(Intel 芯片)WeBan-macos-x64镜像
Mac 苹果电脑(M1/M2/M3/M4 芯片)WeBan-macos-arm64镜像
Linux(Ubuntu/Debian/CentOS,64 位)WeBan-linux-x64镜像
Linux(树莓派/ARM 服务器)WeBan-linux-arm64镜像

Mac 怎么判断芯片:屏幕左上角 → 关于本机,看"芯片"一栏写的是 Apple M 系列(arm64)还是 Intel(x64)。Windows 不确定就选 x64(2010 年后几乎都是)。

第 2 步:运行

  • Windows:双击 WeBan-windows-x64.exe(第一次运行如被 SmartScreen 拦截,点"更多信息" → "仍要运行";杀毒软件误报请添加信任)
  • Mac:在文件目录打开终端运行:
    chmod +x WeBan-macos-*
    xattr -cr WeBan-macos-*
    ./WeBan-macos-arm64 # Intel 芯片换成 WeBan-macos-x64# 然后可能会卡一会,是苹果在验证签名,等就行
  • Linux
    chmod +x WeBan-linux-*
    ./WeBan-linux-x64 # ARM 服务器换成 WeBan-linux-arm64

第 3 步:填账号,开始

第一次运行(或还没有配置文件时),程序会直接让你输入学校、用户名、密码(不用编辑任何文件):

请输入账号信息:
学校全称(如:北京交通大学-本科生): 北京交通大学-本科生
用户名(学号): <你的账号>
密码(默认同用户名): <你的密码>

输入后程序会自动验证账号:登录成功就会把账号自动保存到配置文件 config.toml,然后开始学习和考试;如果学校全称或用户名密码错了,会提示你重新输入,不会写坏配置文件。之后每次运行都会接着上次的进度继续。

配置文件 config.toml 在程序旁边(Windows 是 exe 所在文件夹,Mac/Linux 是运行命令的目录),下次运行前也可以手动改它。用 --data-dir 可以指定固定位置(见下方参数表)。

不想交互输入?一条命令直接跑(学校/学号/密码写在命令里,无需配置文件):

# Windows (PowerShell)$env:WB_TENANT_NAME="你的学校全称";$env:WB_USERNAME="你的学号";$env:WB_PASSWORD="你的密码"; .\WeBan-windows-x64.exe
# mac / Linux
WB_TENANT_NAME="你的学校全称" WB_USERNAME=你的学号 WB_PASSWORD=你的密码 ./WeBan-macos-arm64

全部参数对照表见下方"参数总览";账号想保密的、或一个文件管理多个账号的,用配置文件方式。

参数总览

每个配置项都有命令行参数和环境变量两种方式,三类名称一一对应:配置文件键名(snake_case)= 命令行参数(--kebab-case)= 环境变量(WB_SNAKE_CASE),例如 study_time--study-timeWB_STUDY_TIME。优先级均为 命令行 > 环境变量 > 配置文件

配置文件键参数环境变量说明
--config PATHWB_CONFIG配置文件路径(默认: 程序目录/config.toml)
--data-dir PATHWB_DATA_DIR数据目录(config/logs/answer 都在此,适合挂载)
--non-interactive无交互模式(环境变量用 ENVIRONMENT=docker/container 或 stdin 非 TTY 自动判定)
study_mode--study-modeWB_STUDY_MODE学习模式(false/true/force
exam_mode--exam-modeWB_EXAM_MODE考试模式(false/true/perfect/force
random_answer--random-answerWB_RANDOM_ANSWER题库外题目是否随机作答(true/false
study_time--study-time SECWB_STUDY_TIME每门课学习时长 "基础,随机上限"(秒),如 "20,5"
video_speed--video-speed NWB_VIDEO_SPEED视频课程倍速:0=不按视频时长等待、1=原速、2=半速
exam_question_time--exam-question-time SECWB_EXAM_QUESTION_TIME每道考试题答题等待时长 "基础,随机上限"(秒)
exam_submit_match_rate--exam-submit-match-rate NWB_EXAM_SUBMIT_MATCH_RATE允许交卷的最低题库匹配率(百分比)
browser_path--browser-path PATHWB_BROWSER_PATH浏览器可执行文件路径
cdp_host--cdp-host HOSTWB_CDP_HOSTCDP 浏览器地址
cdp_port--cdp-port PORTWB_CDP_PORTCDP 浏览器端口
jupiter_fallback--jupiter-fallbackWB_JUPITER_FALLBACK对未加载 apicenext.js 的课程是否补发 jupiter 翻页轨迹
max_workers--max-workers NWB_MAX_WORKERS多账号最大并发数
debug--debugWB_DEBUG启用调试日志
tenant_name--tenant-name NAMEWB_TENANT_NAME单账号学校全称(免配置文件)
username--username USERWB_USERNAME单账号用户名
password--password PASSWB_PASSWORD单账号密码(默认同用户名)
user_id--user-id IDWB_USER_ID单账号用户 ID(Token 登录)
token--token TOKENWB_TOKEN单账号登录 Token(配合 --tenant-name --user-id
[ai].enable--ai-enableWB_AI_ENABLE是否启用 AI 搜题(true/false
[ai].base_url--ai-base-url URLWB_AI_BASE_URLAI 服务 API 基础路径
[ai].api_key--ai-api-key KEYWB_AI_API_KEYAI 服务 API Key
[ai].model--ai-model NAMEWB_AI_MODELAI 模型名称
[ai].timeout--ai-timeout SECWB_AI_TIMEOUTAI 请求超时秒数
[ai].max_retries--ai-max-retries NWB_AI_MAX_RETRIESAI 请求失败最大重试次数

无交互自动判定:ENVIRONMENT=docker(或 container)、stdin 非 TTY(cron/后台/管道)、或显式 --non-interactive

完全不写 config.toml 也能运行(单账号 + 全部设置走 CLI/env):

# 环境变量
WB_TENANT_NAME="你的学校全称" WB_USERNAME=你的学号 WB_PASSWORD=你的密码 \
WB_STUDY_TIME="20,5" WB_VIDEO_SPEED=0 ./WeBan-macos-arm64
# 或等价的命令行参数
./WeBan-macos-arm64 --tenant-name "你的学校全称" --username 你的学号 \
--study-time "20,5" --video-speed 0

源码运行

不需要代码基础的用户跳过本节(直接下载二进制即可)。开发者/想改代码时用:

  1. 安装 Python 3(建议使用 uv)和 Git

  2. 克隆本仓库

git clone --depth 1 https://github.com/hangone/WeBan
  1. 安装依赖
pip install -r requirements.txt # 或 uv sync
  1. 运行
python main.py # 或 uv run main.py

运行 python main.py --help 可查看全部参数。

Docker

提供两种镜像变体(多架构 amd64/arm64,发布时随版本推送):

镜像Tag说明
内置浏览器latest / with-browser / <版本号>内置 headless Chrome,开箱即用
轻量镜像without-browser / <版本号>-without-browser通过 CDP 连接宿主机浏览器

容器默认无交互运行(ENVIRONMENT=docker 自动判定),数据全部持久化在 /app/data

mkdir -p data
docker run --rm \
-v "$PWD/data":/app/data \
--cpus 1 \
hangyi/weban:latest
  • 建议 --cpus 1(详见下方"CPU 配额与验证码");首次运行会在 ./data/ 生成 config.toml 模板,填写账号后重新运行即可
  • 日志在 ./data/logs/<账号>/,题库在 ./data/answer/,全部挂载持久化
  • 无交互:不弹编辑器、确认用默认值、验证码自动识别失败不等待手动输入(跳过该课)、末尾不等待回车
  • 需要交互(如手动输验证码)时用 docker run -it(容器检测到 TTY 自动进入交互模式)

所有配置项均可覆盖(命令行参数 > 环境变量 > 配置文件,名称一一对应,见上方参数表)。示例:

# 环境变量(单账号免配置文件)
docker run --rm -v "$PWD/data":/app/data --cpus 1 \
-e WB_TENANT_NAME="你的学校全称" -e WB_USERNAME=你的学号 -e WB_PASSWORD=你的密码 \
-e WB_STUDY_TIME="20,5" -e WB_VIDEO_SPEED=0 \
hangyi/weban:latest
# 命令行参数(经 entrypoint 透传)
docker run --rm -v "$PWD/data":/app/data --cpus 1 \
hangyi/weban:latest --tenant-name "你的学校全称" --username 你的学号 \
--study-time "20,5" --video-speed 0

CPU 配额与验证码

  • docker 下多核正常:实测(docker 29.x,2 核 1.9GB)--cpus 1 / --cpus 2 × 单进程/多进程全部跑通,真实课程点选验证码在 --cpus 2 下完整通过(识别 → 点击 → 提交 → 腾讯 SDK 回调成功),无挂起
  • 建议 --cpus 1:镜像默认单进程 + 单线程识别(WB_SINGLE_PROCESS / WB_CV_THREADS),1 核即可跑通全部验证码;多核配额没有性能收益(Chrome 单进程受单核限制),1.9GB 小内存机器用 2 核反而容易内存吃紧
  • podman 已知特例:podman(如 podman run --cpus 2)下 headless-shell 点选验证码提交后可能挂起(CDP evaluate 无响应 60s+,1 核正常)——这是 podman 的 CPU 配额调度问题,非程序缺陷;podman 部署请用 --cpus 1

轻量镜像(CDP 连接宿主机浏览器)

容器会自动检测 Docker 环境并尝试连接宿主机的 Chrome,无需手动配置 CDP。

第一步:在宿主机启动 Chrome 远程调试

打开 Chrome,地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging for this browser instance

或者直接命令行启动带远程调试的 Chrome:

# macOS"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222
# Linux
google-chrome --remote-debugging-port=9222
# Windows"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222

参考:Chrome DevTools: Debug your browser session

第二步:运行容器

mkdir -p data
docker run --rm \
-v "$PWD/data":/app/data \
hangyi/weban:without-browser

如需自定义 CDP 地址,可用 --cdp-host / --cdp-port 参数或配置文件 cdp_host / cdp_port

浏览器检测

程序按以下优先级自动检测可用的浏览器,无需手动配置:

  1. 用户指定:配置文件 browser_path(或 --browser-path / WB_BROWSER_PATH
  2. CDP 远程调试:配置文件 cdp_host + cdp_port(或 CLI/env),或 Docker 环境下自动尝试 host.docker.internal:9222
  3. Playwright 浏览器:自动查找 ~/.cache/ms-playwright 下的 Chromium
  4. 系统浏览器:自动查找已安装的 Chrome / Chromium / Edge

演示

studyexamold

常见问题

  • 部分无法直接登录的学校/Token 登录方法

有些从迎新系统跳转的可以试试账号密码都是学号,也可以尝试使用 Token 登录,在电脑浏览器登录后按 F12 或者 Ctrl+Shift+I 打开开发者工具,找到本地存储,复制 user 的内容到 config.json 配置文件

chromefirefox

  • 学习

  1. 学习时长太低不会计入进度
  2. 课程点选验证码会自动识别(无头浏览器 + OpenCV,最多 2 轮 × 3 次,可用 WB_CAPTCHA_ROUNDS/WB_CAPTCHA_ATTEMPTS 调整),失败后在交互模式会打开浏览器手动操作,无交互模式(Docker 等)会跳过该课程并告警
  3. 学习进度不更新可能是被风控,遇到了需要验证码的课程,请去网页上完成一次后重试
  • 考试

  1. 考试前有腾讯无感验证码,自动处理(headless 浏览器)
  2. 据观察,考试未提交是不会消耗考试次数的

鸣谢

其他

  1. 本项目仅供学习交流使用,请勿用于商业用途。

  2. 欢迎 Star 喵,欢迎 PR 喵。

  3. 截图时注意打码个人信息。

  4. 如果看不懂上面说的也可以直接扫码备注微信号(不要wxid_开头的,搜不到),乐意效劳。

    微信
    wechat

About

安全微伴(weiban)安全微课 大学生安全教育 自动刷课脚本工具 附带题库

Resources

Stars

1.8k stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages