# 🎓 莞工教务选课系统 CLI + GUI 通过命令行或图形界面直接操作莞工教务系统选课,无需打开浏览器手动操作。 ## 原理 利用已有的 `browser-act` 浏览器会话,通过 JavaScript `fetch()` 在浏览器上下文中直接调用教务系统的 API,自动携带登录态,不需要额外认证。 ## 功能 - ✅ 查看可选课轮次 - ✅ 动态探测选课中心开放了哪些标签页(选修/必修/公选/跨专业等) - ✅ 列出课程列表(编号、名称、学分、容量、已选状态) - ✅ 一键选课 - ✅ 一键退课 - ✅ 搜索课程(支持名称和编号) - ✅ 图形界面(CustomTkinter) - ✅ 自适应不同选课轮次,未来新增轮次无需改代码 ## 文件结构 ``` ├── dgut.py # CLI 入口 ├── dgut-gui.sh # GUI 快捷启动 └── dgut-gui/ ├── dgut_core.py # 核心 API 模块 (CLI 和 GUI 共用) ├── dgut_gui.py # CustomTkinter 图形界面 ├── start.sh # GUI 启动脚本 └── venv/ # Python 虚拟环境 (含 customtkinter) ``` ## 使用前提 1. 已安装 `browser-act` CLI 工具 2. 已通过 `browser-act` 打开浏览器并登录了莞工教务系统 3. 浏览器会话处于活跃状态 ## CLI 使用 ```bash # 查看可选课轮次 python3 dgut.py list-cycles # 探测选课中心开放了哪些标签页 python3 dgut.py list-tabs # 列出课程(默认加载第1个有数据的标签) python3 dgut.py list-courses # 加载指定标签的课程 python3 dgut.py list-courses 2 # 按课程编号选课 python3 dgut.py select 0410578 # 按课程名称选课 python3 dgut.py select "微信小程序" # 退课 python3 dgut.py drop 0410531 # 搜索课程 python3 dgut.py search 鸿蒙 ``` ## GUI 使用 ```bash ./dgut-gui.sh # 或 ./dgut-gui/start.sh ``` GUI 界面提供: - 课程类型下拉切换(自动探测所有可用标签页) - 实时搜索过滤 - 一键选课/退课按钮 - 操作日志显示 - 已选学分/门数统计 ## 依赖 - Python 3.x - [browser-act-cli](https://github.com/your-org/browser-act) — 浏览器自动化 - customtkinter — GUI 界面(已安装在虚拟环境中) ## 工作方式 ``` 你的操作 → dgut.py/dgut_gui.py → 构造 fetch() JavaScript → browser-act eval → 在浏览器中执行 fetch() → 教务系统 API → 返回 JSON 数据 → 解析并展示结果 ``` 所有 API 请求的认证由浏览器会话的 Cookie 自动处理,应用本身不存储任何凭证。 ## API 参考 详细 API 信息参见 [记忆文档](https://github.com/your-org/dgut-course-cli/wiki)。