基于 Rust 生态的吉林大学智能选课助手 — Apple 风格界面
现代化、跨平台、纯 Rust 实现的选课工具
- 🍎 Apple 风格界面 — SF 字体、
#f5f5f7背景、Apple 蓝主色、柔和圆角与阴影、清爽的蓝色聚焦环;登录 / 批次选择 / 抢课控制台三屏统一设计语言。 - ⚡ 多线程并发抢课 — 12 路 worker 共享游标 + 每门课
done标记,对收藏课程并发轮询;一门成功只停该门、不影响其它,致命错误(未登录)才整体停止。 - 🛟 抢课脚本「兜底」 — 自动脚本之外的两层手动保险:
- 手动补刀:每门课「选一次」、列表「全部各选一次」,复用当前登录态直接打一发(桌面 / Web / Android 通用)。
- 内嵌官方网站:桌面端一键在内嵌窗口打开官方选课页,并自动带入登录态(同一会话、同一设备,无需二次登录、不会把自己挤下线)。
- 🌐 自建 CORS 代理 — 内置 actix 代理桥接官网无 CORS 的接口,连接池复用 + 超时保护 + SSRF 白名单 + 凭据日志脱敏。
- 🖥️ 跨平台 — Windows / macOS / Linux 桌面端,以及 Android。
- 🦀 纯 Rust — 前端 Leptos(WASM),外壳 Tauri 2,核心逻辑来自
funky_lesson_core。
前往 Releases 下载对应平台的安装包(Windows .msi/.exe、macOS .dmg、Linux .deb/.AppImage),双击安装运行。
若 Release 暂无你平台的预编译包,可按下方本地开发自行构建。
- Rust 1.85+(edition 2024)
- Trunk(前端打包):
cargo install trunk或包管理器安装 - Tauri CLI 2.x:
cargo install tauri-cli或cargo binstall tauri-cli wasm32-unknown-unknowntarget:rustup target add wasm32-unknown-unknown
git clone https://github.com/sweetcornna/jlucourse.git
cd jlucourse
# 原生桌面(推荐):自动起 trunk + 内置代理
cargo tauri dev
# 纯 Web 调试(快速改 UI):分别启动前端与代理
trunk serve # 前端,端口 1420
cargo run --manifest-path src-proxy/Cargo.toml # CORS 代理,端口 3030
⚠️ CORS 注意:Web 调试流请在浏览器打开 **http://localhost:1420**,不要用127.0.0.1——代理只放行localhost:1420/tauri.localhost来源,用127.0.0.1会触发 “Failed to fetch”。
cargo tauri build # 当前平台安装包
cargo tauri android build # Android APK / AAB仓库自带 GitHub Actions(
.github/workflows/ci.yml):push/PR 跑 fmt + clippy + test;打v*tag 会构建多平台产物。Android 签名构建需在仓库 Secrets 配置ANDROID_KEYSTORE_*,未配置时该任务会失败,可忽略或自行补齐。
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Leptos 前端 │ ⇄ │ Tauri 2 外壳 │ ⇄ │ funky_lesson_core │
│ (Rust / WASM) │ │ + 内嵌代理 │ │ 核心选课逻辑 │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│ HTTP ↑ Authorization
└────────────► actix 代理 (127.0.0.1:3030) ──► icourses.jlu.edu.cn
jlucourse/
├── src/ # Leptos 前端(app.rs 视图与抢课逻辑 / design.css 设计系统)
├── src-tauri/ # Tauri 外壳(含「内嵌官网兜底」命令)
├── src-proxy/ # actix CORS 代理(库 + 二进制薄包装)
├── design/ # Apple 设计预览(同步至 Claude Design 的设计稿来源)
└── .github/ # CI 与素材
- 收藏课程:先到吉大本科生选课网站收藏想抢的课。
- 登录:输入学号 + 密码 + 验证码。
- 选批次 → 进入抢课控制台。
- 开始抢课:自动多线程轮询收藏课程。
- 兜底:脚本抢不到时——点某门课的「选一次」手动补刀,或点「官方选课网站」在内嵌窗口手动操作(桌面端自动带入登录态)。
临近开抢、服务器 503 时不要退出,等网络恢复程序会自动继续。
- 📚 本软件仅供学习与研究,请勿用于任何违反学校规定或法律法规的行为。
- 🛡️ 使用本软件产生的一切后果由使用者自行承担。
- 🏫 本软件未经吉林大学官方授权,与吉林大学无任何关联。
使用本程序即代表你已理解并同意以上声明。
本项目基于 Islatri/funky-lesson(MIT)二次开发,并在其上完成了一轮稳定性 / 性能优化、Apple 风格重设计与「抢课兜底」功能。
- funky-lesson — 上游项目
- funky_lesson_core — 核心选课逻辑库
- Fuck-Lesson — 最初的 Python 选课脚本
