上海科技大学自动抢课程序
运气不好怎么办?这个程序可以帮你蹲守允许抢课的时间段,截胡别人的交易。
后端部署在你自己的电脑或设备上,学校账号密码加密保存在后端数据库中,不经过项目作者的服务器。配置文件、访问令牌和数据库请自己保管,不要上传到公开仓库。
懒人法:打开Codex, Claude Code或任意AI Agent工具,输入以下内容:
访问 https://github.com/Lceoliu/ShanghaiTech-Course-Select 仓库,并根据 README_AGENT.md 中的说明进行操作,部署此项目。
手动部署按下面来。完整配置和常驻服务的设置见 README_AGENT.md。
选一台抢课时能一直开机且能连上学校系统的设备:
- 本地电脑:Windows、Linux 均可。别自动睡眠。
- 服务器或树莓派:装好 Python 3.11 及以上版本,保持网络连通即可。
- OpenWrt 路由器:需要能安装 Python 3.11 及依赖。安装脚本和自启动模板在
tools/openwrt/,具体步骤见 路由器部署。
后端有两个进程:Manager 保存账号和抢课安排,Worker 登录学校、查询课程和提交选课。个人使用把两个进程放在同一台设备上就行,不需要 Docker。
先下载仓库,在仓库根目录创建 Python 虚拟环境:
git clone https://github.com/Lceoliu/ShanghaiTech-Course-Select.git
cd ShanghaiTech-Course-Select
python -m venv .local/venvWindows PowerShell 执行 .local/venv/Scripts/Activate.ps1;Linux 执行 source .local/venv/bin/activate。如果系统只有 python3 命令,上一步用 python3。然后安装依赖、生成配置:
python -m pip install -r backend/requirements.txt
python -m backend.manager --init-config .local/manager.toml继续完成下面的网页构建,再启动 Manager:
python -m backend.manager --config .local/manager.toml默认地址是 http://127.0.0.1:18080。网页连接时用配置文件里的 admin_token,不是学校密码。
在网页的“账号与实例”中新增执行实例,记下返回的 ID 和令牌。把 backend/worker/worker.example.toml 复制为 .local/worker.toml,填入 manager_url、worker_id 和 worker_token。确认要连接学校后,将 allow_school_network 改为 true。
另开一个终端,在同一仓库、同一虚拟环境中启动 Worker:
python -m backend.worker --config .local/worker.toml两个终端都要保持运行。需要开机自启,按 详细部署说明 配置服务。远程设备默认只监听自身回环地址,可以用 SSH 隧道访问;不要直接把管理员接口暴露在公网。
网页版和浏览器扩展互相独立,按习惯选。后台安排保存在同一个后端,关闭页面不影响执行。
构建需要 Node.js 20.19+ 或 22.12+。在仓库根目录执行:
npm --prefix frontend/web ci
npm --prefix frontend/web run build构建完成后启动 Manager,打开 http://127.0.0.1:18080/web/。后端在其他设备上时,把 frontend/web/dist/ 复制到那台设备仓库的同名目录,再启动或重启 Manager。路由器只需要这些构建文件,不需要安装 Node.js。
连接后,在“账号与实例”里添加学校账号并分配给 Worker,回到工作台刷新课程。选好课程后设置全局日期和时刻,再确认加入后台安排;看到安排编号才算保存成功。
日期可以连续选,也可以隔几天选一次;每天可以设多个时刻,统一按北京时间执行。默认提前 30 秒准备登录,每次抢课持续 60 秒。已选中的课程不再提交,同课程其他班次也会停止。结果在“我的安排”里看。
支持 Edge / Chrome,界面改自 BetterEAMS。
- 打开
edge://extensions或chrome://extensions,开启开发者模式。 - 点击“加载解压缩的扩展”,选择仓库中的
frontend/extension文件夹。如果同时装了原 BetterEAMS 脚本,先关掉,避免重复接管页面。 - 登录学校教务系统,进入选课页面。
课程卡片上的“立即选课”会在确认后提交一次,使用当前浏览器登录态,不需要后端,也不会自动重试。
想让后端蹲点,就在扩展图标里填后端地址、端口和 admin_token,然后点“加入后台安排”。学校账号需先在后端登记。多门课可以先“加暂存”,再一起提交。
退课仍在学校原页面操作。扩展更新后要在扩展管理页重新加载,再刷新学校页面。更多说明见 扩展 README。
TODO,暂时没有独立 App。手机可以先用网页版。
仅供学习研究。请遵守学校系统规则和合理访问频率,使用者自行承担风险。