Skip to content

Yakult00/NFUCourseHelper-Modular

Repository files navigation

NFUCourseHelper

广州南方学院教务系统多账号选课助手。

提供账号登录、选课批次读取、课程查询、教学班查询、手动选课、并发任务、结果确认、已选课程查询和退课等功能。任务保存后,重新打开软件只需登录刷新 Cookie,即可直接运行本地缓存任务。

下载 Windows 版 · 使用说明 · 架构说明 · 更新记录

仅用于管理本人有权访问的教务系统账号。软件不能保证选课成功,最终结果以学校教务系统记录为准。

功能

  • 多账号管理:在同一个程序中保存、切换和分别登录多个学生账号。
  • 账号任务隔离:任务绑定指定账号,每个账号使用独立 Session、Cookie 和运行上下文。
  • 登录批次分离:登录只获取和刷新 Cookie,需要查找新课程时才读取选课批次。
  • 课程查询:按课程名称查询课程和教学班,显示教师、时间、地点和容量等信息。
  • 手动选课:对选中的教学班发起一次选课提交。
  • 并发任务:多个选课任务可以并发运行,每个 worker 使用独立的请求控制。
  • 任务持久化:任务、教学班 ID 和必要批次参数保存在本地,软件重启后可以恢复。
  • 缓存直接运行:已有任务在登录成功后直接启动,不再重复解析批次、Display 页面和教学班。
  • 结果二次确认:接口返回成功后再次读取已选课程,确认是否真正选中。
  • 自动重试恢复:登录失败持续重试;会话失效或出现 JAS-04 时只恢复受影响的 worker。
  • 已选与退课:读取服务器已选课程,并在确认后提交退课请求。
  • 任务行状态:提交次数、运行状态和服务器结果显示在对应任务后,减少日志刷屏。

下载安装

Windows 免安装版

  1. 打开 Releases
  2. 下载 NFUCourseHelper-Windows-x64.zip
  3. 将压缩包完整解压到可写目录。
  4. 双击运行 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

使用方法

首次创建任务

  1. 新增账号,填写账号备注、学号和密码。
  2. 点击“登录/刷新 Cookie”。
  3. 点击“读取选课批次”,选择需要查询的批次。
  4. 输入课程名称,查询课程和教学班。
  5. 选择教学班,立即选课或添加到任务。
  6. 设置任务间隔和并发数,然后启动任务。
登录/刷新 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 构造。

使用边界

  • 仅用于访问和管理使用者本人有权使用的教务系统账号。
  • 使用者应遵守学校规章、教务系统使用条款和适用法律法规。
  • 请合理设置并发数量和请求间隔,不要影响教务系统正常运行。
  • 软件不能保证选课成功,最终结果以学校教务系统记录为准。

About

广州南方学院教务系统多账号选课助手:课程查询、教学班选择、并发任务、任务缓存、结果确认与退课。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages