AutoBJCE-京网院学习助手 是一个面向 Windows 的干部网络学院课程辅助工具(GUI 版),基于 Python + Playwright 实现。
本项目当前重点是:
- 提供可视化界面配置账号与目标学时。
- 手动登录 + 登录信息本地保存(扫码一次,长期免登录)。
- 一键启动自动学习流程,必修 / 选修按目标自动切换。
- 可打包为 EXE 并进一步制作安装包。
- 图形界面配置(无需手改代码):
- 6 组账号槽位(每行显示登录状态 + 按钮,账号名直接用抓取到的登录用户名)
- 必修目标学时 / 选修目标学时
- 登录模块(v2.3 起,v3.0 完善):
- 不用填账号密码:点登录按钮后打开真实浏览器窗口并弹出登录二维码, 由你扫码(或用账号密码)完成登录,程序只负责把窗口和二维码准备好。
- 只有一个按钮:账号行按状态显示「去登录 / 登录 · 换账号 / 退出登录」, 点下去该做什么由程序判断,不暴露"打开窗口、校验、切换"等操作。
- 开始刷课会自己引导登录:所选槽位还没登录时,点「开始刷课」会自动 打开窗口等你扫码,登录成功后立刻接着开始刷课。
- 登录信息持久化:每个槽位使用独立的 Chromium 持久化用户目录
(
userdata/profiles/account-N),cookie / localStorage 落盘, 关掉程序后下次打开无需重新扫码。 - 登录态快照按人头存:退出账号前把 Cookie 另存一份(文件名带登录账号), 因此同一个槽位来回换人时,切回谁都能直接复用(不必重新扫码), 每个槽位最多记 5 个账号。
- 目标学时驱动:
- 自动在内置的必修(政治理论
zhengzhililun)与选修(综合素质zonghesuzhi)专题间切换。 - 某一类达标后自动切换到另一类,两类均达标即结束。
- 自动在内置的必修(政治理论
- 课程播放进度监控与基础防挂机动作。
- 网络自愈:遇到异常后每 3 分钟自动刷新重试(期间可随时停止)。
- 兼容验证码场景:检测到验证码时提示手动处理。
- 配置持久化:保存到
config.json,并同步生成.env。
- 操作系统:Windows 10/11(推荐)
- 浏览器:已安装任意 Chromium 内核浏览器(Chrome / Edge / Brave / Vivaldi / Opera / Chromium 等,自动探测,也可手动指定)
- 网络:可正常访问
bjce.bjdj.gov.cn
- 打开
dist/AutoBJCE/AutoBJCE.exe(窗口标题为AutoBJCE-京网院学习助手)。 - 填写本年度期望的必修 / 选修目标学时,点「保存配置」。
- 在「刷课账号」里选一个槽位(如「账号1」),点「开始刷课」。
- 该槽位还没登录时,程序会自动打开浏览器窗口并弹出登录二维码, 用手机微信扫码(或输入账号密码)登录;登录成功后自动接着开始刷课,不用再点别的。
- 已经登录过的话,直接就开始刷课。
- 刷到目标后工具会自动切换到另一类课程,两类全部达标后自动结束。
想在刷课前先把几个账号都准备好:点对应行的按钮完成登录即可, 之后每次直接选槽位、点「开始刷课」。
账号区每行只有一个按钮,程序自己判断该做什么,不需要你理解"打开窗口 / 校验 / 切换":
| 该行状态 | 按钮 | 点下去会发生什么 |
|---|---|---|
| 没登录过 | 去登录 | 打开浏览器 + 弹出登录二维码,扫码即完成 |
| 登录过、已退出 | 登录 · 换账号 | 能直接复用上次的登录信息就秒进;不行才让你扫码 |
| 正在使用 | 退出登录 | 退出该账号,但登录信息保留,以后还能一键复用 |
- 换人:点「退出登录」→ 再点「登录 · 换账号」→ 扫码登录新的人。 上一个人的登录信息会保留(每个槽位最多记 5 个),切回来不用重新扫码。
- 多个人长期共用:各占一个槽位(共 6 个),互不影响,谁都不用退出。
| 内容 | 位置 |
|---|---|
| 配置(目标学时、浏览器、账号槽位) | config.json(EXE 同目录) |
| 各账号登录态(cookie / 本地存储) | userdata/profiles/account-N/ |
| 账号摘要(当前登录谁、历史账号) | userdata/profiles/account-N/profile.json |
| 登录态快照(按人头各存一份) | userdata/profiles/account-N/auth_state.<登录账号>.json |
注意:登录信息等价于账号凭据,请勿把
userdata目录拷贝给他人。
界面上与登录相关的操作只有账号行那一个按钮(外加「开始刷课」会自动引导登录), 没有"打开窗口 / 校验登录信息 / 切换账号"这些需要你理解的开关。
- 按下去做什么由该行状态决定,见上文「账号怎么换?」表格;
- 全程不需要填账号密码:窗口打开后扫码即可,程序只负责把二维码准备好。
登录状态判定不看页面长什么样,而是直接调用站内接口
/api-ouser/portal/user/getCurrentUser,返回 data.name / data.userName 即视为已登录。
GUI 主配置文件,位于程序目录(EXE 同目录)。
示例:
{
"users": [
{"name": "账号1", "id": "account-1"},
{"name": "账号2", "id": "account-2"},
{"name": "账号3", "id": "account-3"},
{"name": "账号4", "id": "account-4"},
{"name": "账号5", "id": "account-5"},
{"name": "账号6", "id": "account-6"}
],
"mandatory_target": 30,
"optional_target": 20,
"browser": "auto",
"user_data_dir": "userdata\\profiles"
}
id与登录信息目录一一对应,程序会自动纠正,无需手改。users[].name只是配置里的占位标签(界面不再显示备注名一列, 账号列表直接显示抓取到的登录用户名),保留它是为了兼容旧配置、不丢字段。- 旧版配置(
users里带username/password)可以继续读取:name会沿用原值(为空时用原username),密码字段会被丢弃—— v2.3 起登录完全由用户在浏览器中完成,v3.0 起登录信息按槽位长期保存。- 必修 / 选修的专题链接已写死在
Shuake.py(MANDATORY_URL/OPTIONAL_URL),无需也无法在界面修改。
config.json 中的 browser 字段决定使用哪个浏览器,取值有三种:
"auto"(默认):自动探测本机已安装的 Chromium 内核浏览器,按 Chrome → Edge → Brave → Vivaldi → Opera → Chromium → 360 / QQ / 搜狗 的顺序尝试;- Playwright channel 名:
"chrome"、"chrome-beta"、"chrome-dev"、"msedge"、"msedge-beta"、"msedge-dev"; - 浏览器可执行文件绝对路径,例如
"C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe"。
在界面「浏览器」下拉框里选择「自动检测」即可,也可以点「浏览…」手动指定 exe。 日志里会打印实际使用的浏览器;若某个浏览器启动失败,会自动换下一个候选。
登录信息依赖浏览器用户目录,因此打包产物自带的 Playwright 内置 Chromium 不参与登录流程, 必须使用本机安装的 Chromium 内核浏览器。
由 GUI 自动同步生成,主要用于兼容旧流程(不再包含密码)。
通常是打包环境中的 Playwright driver 配置异常或旧版产物未更新。
建议:
- 确认使用的是最新
dist/AutoBJCE/AutoBJCE.exe。 - 重新构建
dist后再运行。 - 确认系统已安装任意 Chromium 内核浏览器(Chrome / Edge / Brave 等),或在界面中手动指定浏览器 exe。
程序会依次尝试:界面/配置指定的浏览器 → 自动探测到的本机浏览器。 全部失败时会打印每个候选的失败原因。
排查建议:
- 确认至少装了一个 Chromium 内核浏览器;没装的话装 Chrome / Edge / Brave 均可。
- 若浏览器装在非默认目录,点「浏览…」手动指定 exe。
- 日志出现"调试端口接管"说明该内核不支持 Playwright 默认的管道模式,程序已自动降级,属正常现象。
登录完全由你在浏览器窗口中完成,程序不会代填密码。检测到验证码时会提示人工处理, 在窗口中完成验证码或扫码后,程序会自动继续(界面会显示当前登录的用户名)。
服务端的登录会话过期了(例如长时间未使用、被其它设备顶下线)。 点该行的「重新登录」重新登录一次即可,其它槽位的登录信息不受影响。
点「退出登录」时旧账号的 Cookie 会被清掉,但程序在此之前按人头存了一份登录态快照。 之后切回上一个人时,点「登录 · 换账号」,程序会先用快照恢复 Cookie,不必重新扫码。 若快照已失效(服务端会话过期),照常扫码即可。
要长期保存多个人的登录信息,最省事的做法还是各占一个槽位(共 6 个): 换人时改选「刷课账号」并点对应行的按钮,彼此完全隔离。
常见于网络波动或网站响应慢。除了更稳妥的首页进入与登录后页面就绪等待外, 还内置了 3 分钟的自动恢复重试:遇到任何异常会自动等待后刷新页面继续刷课, 无需人工干预。如需中止请点击"停止"。
按你本年度任务要求填写总学时即可(如必修 30、选修 20)。工具会每刷完一门课就重新读取页面上的已学学时:
- 已达目标的类型自动不再进入;
- 未达目标的类型自动继续进入;
- 两类均达标时自动结束浏览器和任务。
仅需刷其中一类时,把另一类填 0 即可。
推荐 Python 3.11。
pip install -r requirements.txt
pip install python-dotenv aiohttp DrissionPage
python -m playwright install chromium
playwright install chromium是可选的:源码运行时它作为"没装任何浏览器"时的最后兜底, 打包产物不含该内核,因此正式使用请依赖本机已安装的 Chromium 内核浏览器。
python gui.py项目已提供 build.spec。
python -m PyInstaller build.spec --distpath dist --workpath build_work --noconfirm构建后主程序位于:
dist/AutoBJCE/AutoBJCE.exe
- 已完成 EXE 构建,且
dist/AutoBJCE为最新产物。 - 本机已安装 Inno Setup 6。
iscc installer/AutoBJCE.iss默认输出:
installer/Output/AutoBJCE-Setup.exe
安装脚本会检查是否安装了任意 Chromium 内核浏览器;若未检测到会弹出提示,但允许继续安装。
gui.py:GUI 主入口(界面 + 事件分发)app_config.py:配置读写、账号状态展示(不依赖 tkinter,可单独测试)login.py:登录会话管理(手动登录、用户名抓取、切换账号、登录信息持久化)Shuake.py:自动化核心逻辑(复用登录窗口)getcourseid.py:课程数据接口处理browser_launcher.py:Chromium 内核浏览器探测与启动(含持久化用户目录、调试端口降级)build.spec:PyInstaller 打包配置installer/AutoBJCE.iss:Inno Setup 安装脚本
本项目仅用于个人学习与技术交流,请遵守目标平台服务条款及相关法律法规。