# 自动选课脚本 一个用于某URP系统的自动监控课程余量并进行选课的工具。当目标课程有余量时,程序会自动尝试选课,并推送选课结果。 ## 功能特点 - 🔄 自动监控课程余量 - 📱 微信消息推送通知 - 🔁 失败自动重试 - 📊 支持多种格式的课程文件 - 📝 详细的日志记录 ## 使用前准备 ### 1. 准备课程文件 创建一个Excel文件(建议命名 `lessons.xlsx`),**至少**包含以下三列: | 课程号 | 课序号 | 课程名 | |--------|--------|--------| | 080302001 | 01 | 高等数学A | | 080302002 | 02 | 线性代数 | **说明:** - **课程名**:课程的完整名称,不允许增加空格等,建议直接复制选课手册行。 - 允许出现除上述内容以外的项,所以如果是辽大的可以直接复制选课手册对应行到文件中。 - 允许存在**同一课程多个课序号**,将按照自上而下的顺序选,任何一个选课成功就认为该课程选课成功。 - 具体格式参考`demo.xlsx`和`demo.csv` - 支持的文件格式:`.xlsx`、`.xls`、`.csv`、`.json` ### 2. 配置环境变量 创建 `.env` 文件,包含以下配置: ```env # 教务系统登录信息 uname=你的学号 password=你的密码 # 验证码识别服务账号(必需) recap_username=验证码识别服务用户名 recap_password=验证码识别服务密码 # 课程文件路径 # 改成自己起的名字,注意拓展名 FILE=lessons.xlsx # 微信推送服务(可选) SC_KEY=你的ServerChan密钥 # 教务系统地址(可选,默认为辽宁大学) base=http://jwstudent.lnu.edu.cn # 查询间隔 # 每次选课请求间隔 INTERVAL_1=2 # 完成一轮选课后的间隔 INTERVAL_2=10 ``` 你可以查看`.env_demo`查看样例。 ### 3. 获取验证码识别服务 目前使用 http://www.fdyscloud.com.cn/ 提供的验证码识别,0.003 元/张。 这是一个付费平台,与作者无关。 操作方法: 1. 打开并注册账号(密码建议随机,因为要明文保存) 2. 充值合适余额(1元估计就够用到大学毕业了) 3. 在.env文件中`recap_username`和`recap_password`输入你的账号密码。 如果您不希望付费,可以修改代码中的`Lessons.recapture`自行实现本地验证码OCR。 ### 4. 设置推送(可选) 如需接收选课结果的微信推送: 1. 访问 [Server酱](https://sct.ftqq.com/)或者[Server$^3$酱](https://sct.ftqq.com/) 2. 注册并获取SendKey 3. 将密钥填入 `.env` 文件的 `SC_KEY` 字段 **注意,Server$^3$酱会产生费用** ### 5. 安装依赖 ```bash pip install -r requirements.txt ``` ## 使用方法 1. 确保已完成上述准备工作 2. 将课程文件和 `.env` 文件放在脚本同目录下 3. 运行脚本: ``` python main.py ``` ## 运行流程 1. **登录验证**: 自动登录教务系统 2. **读取课程**: 从课程文件中读取要选择的课程信息 3. **监控余量**: 循环检查各课程的剩余名额 4. **自动选课**: 发现有余量时立即尝试选课 5. **结果通知**: 通过推送选课结果 6. **持续监控**: 未选上的课程继续监控 ## 注意事项 ⚠️ **重要提醒**: - 请在选课开放时间内使用,在未开放时会发生未知错误。 - 确保网络连接稳定 - 验证码识别服会产生费用 - 建议在选课高峰期前测试配置是否正确 - 程序会自动处理网络异常和重新登录 ## 日志文件 程序运行时会在 `logs` 目录下生成详细的日志文件,文件名格式为 `lessons_YYYYMMDD_HHMMSS.log`,可用于排查问题。 ## 文件结构 ``` 项目目录/ ├── main.py # 主程序 ├── .env # 环境变量配置文件 ├── lessons.xlsx # 课程信息文件 ├── logs/ # 日志文件目录 └── README.md # 说明文档 ``` ## 常见问题 **Q: 程序提示"请在环境变量中设置xxx"** A: 检查 `.env` 文件是否存在且包含所有必需的配置项 **Q: 一直提示登录失败** A: 检查用户名密码是否正确,以及验证码识别服务是否可用 **Q: 找不到课程信息** A: 检查课程文件中的课程号和课序号是否正确 **Q: 没有收到推送** A: 检查 ServerChan 配置是否正确,或查看日志中的错误信息