diff --git a/README.md b/README.md new file mode 100644 index 0000000..d923e51 --- /dev/null +++ b/README.md @@ -0,0 +1,138 @@ +# 自动选课脚本 + +一个用于某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 +``` + +你可以查看`.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 配置是否正确,或查看日志中的错误信息 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e52d778 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +python-dotenv +pandas +requests +beautifulsoup4 +serverchan-sdk +openpyxl \ No newline at end of file