145 lines
4.3 KiB
Markdown
145 lines
4.3 KiB
Markdown
# 自动选课脚本
|
||
|
||
一个用于某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 配置是否正确,或查看日志中的错误信息
|