# 成绩监控系统 自动监控东北大学成绩系统,当有新课程成绩发布时自动发送邮件通知。 ## 快速开始 ### 1. 安装依赖(WSL环境) ```bash cd /mnt/e/50425/Documents/Github/GPA_Monitoring chmod +x setup_python.sh ./setup_python.sh ``` ### 2. 配置 编辑 `config.ini` 文件,填入你的信息: ```ini [login] USERNAME = 你的学号 PASSWORD = 你的密码 [email] SENDER_EMAIL = your_email@163.com SENDER_PASSWORD = SMTP授权码(不是邮箱密码!) RECEIVER_EMAIL = 接收通知的邮箱 ``` **获取163邮箱SMTP授权码:** 1. 登录163邮箱网页版 2. 设置 → POP3/SMTP/IMAP 3. 开启"IMAP/SMTP服务" 4. 发送短信获取授权码 ### 3. 测试运行 ```bash source venv/bin/activate python3 monitor.py --test ``` 检查生成的文件确认内容正确: - `.last_grade_content.txt` - 提取的成绩内容(整齐格式) - `.last_grade_page.html` - 原始HTML页面 ### 4. 正式运行 ```bash # 使用tmux后台运行(推荐) tmux new -s grade_monitor source venv/bin/activate python3 monitor.py # 按 Ctrl+B 然后按 D 离开会话 ``` ## 功能特点 ✅ **智能检测** - 检测新增课程(而非简单的页面变化) ✅ **详细通知** - 邮件包含新增课程名称 ✅ **格式化输出** - 成绩保存为整齐的文本格式,包含总绩点 ✅ **错误通知** - 连续失败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` - 运行日志 ## 命令说明 ```bash # 查看帮助 python3 monitor.py --help # 测试模式(获取一次成绩) python3 monitor.py --test # 正常监控模式 python3 monitor.py # 查看日志 tail -f monitor.log # 查看成绩 cat .last_grade_content.txt ``` ## 监控原理 1. **定时访问** - 每60秒(可配置)访问一次成绩页面 2. **解析成绩** - 提取总绩点和每门课程信息 3. **智能对比** - 对比课程列表,检测新增课程 4. **邮件通知** - 发现新课程立即发送邮件 ## 故障排查 ### 问题:登录失败 **解决:** 1. 检查 `config.ini` 中的用户名密码 2. 手动登录网页版确认账号正常 3. 查看 `.debug_response.html` 了解实际响应 ### 问题:邮件发送失败 **解决:** 1. 确认使用SMTP授权码(不是邮箱密码) 2. 检查163邮箱是否开启SMTP服务 3. 查看 `monitor.log` 了解错误详情 ### 问题:提示"请不要过快点击" **解决:** - 程序会自动增加等待时间 - 可在 `config.ini` 中增大 `CHECK_INTERVAL` ## 配置说明 ```ini [monitor] CHECK_INTERVAL = 60 # 检查间隔(秒) REQUEST_DELAY = 5 # 请求延迟(秒) MAX_RETRIES = 3 # 重试次数 RETRY_DELAY = 10 # 重试间隔(秒) ``` ## 停止监控 ```bash # 前台运行时按 Ctrl+C # tmux中 tmux attach -t grade_monitor # 然后按 Ctrl+C ``` ## 注意事项 ⚠️ **请勿过于频繁地检查** - 建议检查间隔不小于60秒 ⚠️ **保护好配置文件** - 包含账号密码,不要上传到公共仓库 ⚠️ **授权码不是密码** - 163邮箱需要单独获取SMTP授权码 ## 许可证 MIT License