成绩监控系统
自动监控东北大学成绩系统,当有新课程成绩发布时自动发送邮件通知。
快速开始
1. 安装依赖(WSL环境)
cd /mnt/e/50425/Documents/Github/GPA_Monitoring
chmod +x setup_python.sh
./setup_python.sh
2. 配置
编辑 config.ini 文件,填入你的信息:
[login]
USERNAME = 你的学号
PASSWORD = 你的密码
[email]
SENDER_EMAIL = your_email@163.com
SENDER_PASSWORD = SMTP授权码(不是邮箱密码!)
RECEIVER_EMAIL = 接收通知的邮箱
获取163邮箱SMTP授权码:
- 登录163邮箱网页版
- 设置 → POP3/SMTP/IMAP
- 开启"IMAP/SMTP服务"
- 发送短信获取授权码
3. 测试运行
source venv/bin/activate
python3 monitor.py --test
检查生成的文件确认内容正确:
.last_grade_content.txt- 提取的成绩内容(整齐格式).last_grade_page.html- 原始HTML页面
4. 正式运行
# 使用tmux后台运行(推荐)
tmux new -s grade_monitor
source venv/bin/activate
python3 monitor.py
# 按 Ctrl+B 然后按 D 离开会话
Docker 部署(推荐)
运行日志和缓存文件会写入
./data/,配置文件挂载为只读。
# 1) 准备配置文件(同级目录下的 config.ini)
# 2) 启动
docker compose up -d --build
# 查看日志
docker logs -f gpa-monitor
测试模式:
docker compose run --rm gpa-monitor python /app/monitor.py --config /data/config.ini --test
功能特点
✅ 智能检测 - 检测新增课程(而非简单的页面变化)
✅ 详细通知 - 邮件包含新增课程名称
✅ 格式化输出 - 成绩保存为整齐的文本格式,包含总绩点
✅ 错误通知 - 连续失败5次自动发送错误通知邮件
✅ 稳定可靠 - 自动重试、会话管理、异常处理
✅ 防封禁 - 请求间隔控制,避免过快访问
文件说明
主要文件:
monitor.py- 主程序config.ini- 配置文件requirements.txt- Python依赖setup_python.sh- 安装脚本
自动生成的文件:
.last_grade_content.txt- 当前成绩内容(格式化).last_grade_page.html- 原始HTML页面.last_courses.txt- 课程列表(用于检测新增).last_grade_hash.txt- 内容哈希(用于检测变化)monitor.log- 运行日志
命令说明
# 查看帮助
python3 monitor.py --help
# 测试模式(获取一次成绩)
python3 monitor.py --test
# 正常监控模式
python3 monitor.py
# 查看日志
tail -f monitor.log
# 查看成绩
cat .last_grade_content.txt
监控原理
- 定时访问 - 每60秒(可配置)访问一次成绩页面
- 解析成绩 - 提取总绩点和每门课程信息
- 智能对比 - 对比课程列表,检测新增课程
- 邮件通知 - 发现新课程立即发送邮件
故障排查
快速诊断工具
如果遇到问题,使用诊断脚本快速检查:
chmod +x diagnose.sh
./diagnose.sh
该脚本会自动检查:
- 依赖库是否安装
- 能否成功提取成绩
- 调试文件内容
- 并提供修复建议
问题:未能提取到成绩信息(共 0 门课程)
症状: 日志显示 [WARNING] 未能提取到成绩信息,返回原始文本
快速修复:
# 1. 检查并安装依赖
pip3 install beautifulsoup4 requests
# 2. 运行调试模式
python3 monitor.py --test --debug
# 3. 查看详细信息
cat .last_grade_content.txt
cat debug_page.html | head -50
可能原因:
- BeautifulSoup 库未安装
- 登录会话失效
- 网页结构变化
详细解决方案: 查看 故障排查指南.md
问题:登录失败
解决:
- 检查
config.ini中的用户名密码 - 手动登录网页版确认账号正常
- 查看
.debug_response.html了解实际响应
问题:邮件发送失败
解决:
- 确认使用SMTP授权码(不是邮箱密码)
- 检查163邮箱是否开启SMTP服务
- 查看
monitor.log了解错误详情
问题:提示"请不要过快点击"
解决:
- 程序会自动增加等待时间
- 可在
config.ini中增大CHECK_INTERVAL - 详见 常见问题解决.md
配置说明
[monitor]
CHECK_INTERVAL = 60 # 检查间隔(秒)
REQUEST_DELAY = 5 # 请求延迟(秒)
MAX_RETRIES = 3 # 重试次数
RETRY_DELAY = 10 # 重试间隔(秒)
停止监控
# 前台运行时按 Ctrl+C
# tmux中
tmux attach -t grade_monitor
# 然后按 Ctrl+C
注意事项
⚠️ 请勿过于频繁地检查 - 建议检查间隔不小于60秒
⚠️ 保护好配置文件 - 包含账号密码,不要上传到公共仓库
⚠️ 授权码不是密码 - 163邮箱需要单独获取SMTP授权码
许可证
MIT License
Description
Languages
Python
83.7%
Shell
15.1%
Dockerfile
1.2%