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-*
    ./WeBan-macos-arm64   # Intel 芯片换成 WeBan-macos-x64
  • Linux
    chmod +x WeBan-linux-*
    ./WeBan-linux-x64     # ARM 服务器换成 WeBan-linux-arm64

第 3 步:填账号,开始

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

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

输入后程序会自动验证账号:登录成功就会把账号自动保存到配置文件 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 PATH WB_CONFIG 配置文件路径(默认: 程序目录/config.toml)
--data-dir PATH WB_DATA_DIR 数据目录(config/logs/answer 都在此,适合挂载)
--non-interactive 无交互模式(环境变量用 ENVIRONMENT=docker/container 或 stdin 非 TTY 自动判定)
study_mode --study-mode WB_STUDY_MODE 学习模式(false/true/force
exam_mode --exam-mode WB_EXAM_MODE 考试模式(false/true/perfect/force
random_answer --random-answer WB_RANDOM_ANSWER 题库外题目是否随机作答(true/false
study_time --study-time SEC WB_STUDY_TIME 每门课学习时长 "基础,随机上限"(秒),如 "20,5"
video_speed --video-speed N WB_VIDEO_SPEED 视频课程倍速:0=不按视频时长等待、1=原速、2=半速
exam_question_time --exam-question-time SEC WB_EXAM_QUESTION_TIME 每道考试题答题等待时长 "基础,随机上限"(秒)
exam_submit_match_rate --exam-submit-match-rate N WB_EXAM_SUBMIT_MATCH_RATE 允许交卷的最低题库匹配率(百分比)
browser_path --browser-path PATH WB_BROWSER_PATH 浏览器可执行文件路径
cdp_host --cdp-host HOST WB_CDP_HOST CDP 浏览器地址
cdp_port --cdp-port PORT WB_CDP_PORT CDP 浏览器端口
jupiter_fallback --jupiter-fallback WB_JUPITER_FALLBACK 对未加载 apicenext.js 的课程是否补发 jupiter 翻页轨迹
max_workers --max-workers N WB_MAX_WORKERS 多账号最大并发数
debug --debug WB_DEBUG 启用调试日志
tenant_name --tenant-name NAME WB_TENANT_NAME 单账号学校全称(免配置文件)
username --username USER WB_USERNAME 单账号用户名
password --password PASS WB_PASSWORD 单账号密码(默认同用户名)
user_id --user-id ID WB_USER_ID 单账号用户 ID(Token 登录)
token --token TOKEN WB_TOKEN 单账号登录 Token(配合 --tenant-name --user-id
[ai].enable --ai-enable WB_AI_ENABLE 是否启用 AI 搜题(true/false
[ai].base_url --ai-base-url URL WB_AI_BASE_URL AI 服务 API 基础路径
[ai].api_key --ai-api-key KEY WB_AI_API_KEY AI 服务 API Key
[ai].model --ai-model NAME WB_AI_MODEL AI 模型名称
[ai].timeout --ai-timeout SEC WB_AI_TIMEOUT AI 请求超时秒数
[ai].max_retries --ai-max-retries N WB_AI_MAX_RETRIES AI 请求失败最大重试次数

无交互自动判定: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

演示

study exam old

常见问题

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

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

chrome firefox

  • 学习

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

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

鸣谢

其他

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

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

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

  4. 如果看不懂上面说的也可以直接扫码备注微信号,乐意效劳。

    微信
    wechat

About

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

Resources

Stars

1.7k stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages