广州南方学院教务系统多账号选课助手。
提供账号登录、选课批次读取、课程查询、教学班查询、手动选课、并发任务、结果确认、已选课程查询和退课等功能。任务保存后,重新打开软件只需登录刷新 Cookie,即可直接运行本地缓存任务。
下载 Windows 版 · 使用说明 · 架构说明 · 更新记录
仅用于管理本人有权访问的教务系统账号。软件不能保证选课成功,最终结果以学校教务系统记录为准。
- 多账号管理:在同一个程序中保存、切换和分别登录多个学生账号。
- 账号任务隔离:任务绑定指定账号,每个账号使用独立 Session、Cookie 和运行上下文。
- 登录批次分离:登录只获取和刷新 Cookie,需要查找新课程时才读取选课批次。
- 课程查询:按课程名称查询课程和教学班,显示教师、时间、地点和容量等信息。
- 手动选课:对选中的教学班发起一次选课提交。
- 并发任务:多个选课任务可以并发运行,每个 worker 使用独立的请求控制。
- 任务持久化:任务、教学班 ID 和必要批次参数保存在本地,软件重启后可以恢复。
- 缓存直接运行:已有任务在登录成功后直接启动,不再重复解析批次、Display 页面和教学班。
- 结果二次确认:接口返回成功后再次读取已选课程,确认是否真正选中。
- 自动重试恢复:登录失败持续重试;会话失效或出现
JAS-04时只恢复受影响的 worker。 - 已选与退课:读取服务器已选课程,并在确认后提交退课请求。
- 任务行状态:提交次数、运行状态和服务器结果显示在对应任务后,减少日志刷屏。
- 打开 Releases。
- 下载
NFUCourseHelper-Windows-x64.zip。 - 将压缩包完整解压到可写目录。
- 双击运行
NFUCourseHelper.exe。
无需安装 Python,不要直接在压缩包内运行程序。
运行环境:
- Windows 10/11
- Python 3.10 或更高版本
- 可以正常访问广州南方学院教务系统
git clone https://github.com/Yakult00/NFUCourseHelper-Modular.git
cd NFUCourseHelper-Modular
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
python main.py也可以通过包入口启动:
python -m nfu_course_helper- 新增账号,填写账号备注、学号和密码。
- 点击“登录/刷新 Cookie”。
- 点击“读取选课批次”,选择需要查询的批次。
- 输入课程名称,查询课程和教学班。
- 选择教学班,立即选课或添加到任务。
- 设置任务间隔和并发数,然后启动任务。
登录/刷新 Cookie
→ 读取选课批次
→ 查询课程与教学班
→ 添加任务
→ 启动并发任务
本地任务缓存完整时,不需要再次查询课程和解析批次:
打开软件
→ 登录/刷新 Cookie
→ 直接启动已有任务
→ 并发提交
→ 读取已选课程确认结果
只有在以下情况下才会重新获取当前账号或 worker 的运行参数:
- 第一次创建任务;
- 任务缓存字段不完整;
- 更换了账号凭据;
- 将任务绑定到另一个账号;
- Cookie 或登录会话失效;
- 教务系统返回
JAS-04等校验错误; - 学校更换选课批次或教学班。
每个账号分别维护:
requests.Session和 Cookie;- 登录状态和停止事件;
- 学生信息与选课批次;
- 动态页面参数;
- 任务缓存快照;
- worker 请求锁和运行状态。
任务必须绑定明确的 account_id。账号凭据变化或任务换绑账号时,程序会使旧缓存失效,避免把一个账号的身份参数用于另一个账号。
程序会在运行目录创建:
jwxt_config.json
jwxt_tasks.json
jwxt_config.json保存本地账号配置,可能包含账号和密码。jwxt_tasks.json保存课程任务、教学班和安全白名单批次字段。- 任务文件不保存 Cookie、Session、CSRF Token 或 worker 临时对象。
- 两个运行配置文件均已加入
.gitignore,不会进入正常 Git 提交。 - 不要在截图、日志、Issue 或公开目录中泄露这些文件。
NFUCourseHelper-Modular/
├─ main.py # 程序入口
├─ nfu_course_helper/
│ ├─ client.py # 教务系统 HTTP 客户端
│ ├─ parsers.py # 页面和动态字段解析
│ ├─ models.py # 选课批次数据模型
│ ├─ storage.py # 账号与任务持久化
│ └─ gui/
│ ├─ app.py # 应用状态与生命周期
│ ├─ accounts.py # 账号、登录和批次
│ ├─ courses.py # 查课、选课和添加任务
│ ├─ tasks.py # 并发任务调度
│ └─ selected.py # 已选课程与退课
├─ docs/ # 使用和架构文档
├─ tests/ # 自动化测试
├─ pyproject.toml # Python 项目配置
└─ requirements.txt # 运行依赖
python -m pip install -e .
python -m compileall -q .
python -m tests.test_dynamic_fields
python -m tests.test_immediate_concurrency
python -m tests.test_persisted_task_cache
python -m tests.test_gui_smoke测试覆盖账号与批次隔离、动态字段解析、worker 并发、任务缓存恢复、敏感字段过滤、会话失效恢复和 GUI 构造。
- 仅用于访问和管理使用者本人有权使用的教务系统账号。
- 使用者应遵守学校规章、教务系统使用条款和适用法律法规。
- 请合理设置并发数量和请求间隔,不要影响教务系统正常运行。
- 软件不能保证选课成功,最终结果以学校教务系统记录为准。