ChuXun d3dca1bd6b 1
2026-01-29 06:19:09 +08:00
2026-01-29 05:57:54 +08:00
2026-01-29 05:57:54 +08:00
1
2026-01-18 18:48:20 +08:00
1
2026-01-18 18:48:20 +08:00
1
2026-01-18 18:48:20 +08:00
1
2026-01-29 03:39:01 +08:00
2026-01-29 05:57:54 +08:00
2026-01-29 05:57:54 +08:00
1
2026-01-18 18:48:20 +08:00
2026-01-29 05:57:54 +08:00
2026-01-29 05:57:54 +08:00
1
2026-01-18 18:48:20 +08:00
1
2026-01-18 18:48:20 +08:00

成绩监控系统

自动监控东北大学成绩系统,当有新课程成绩发布时自动发送邮件通知。

快速开始

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授权码

  1. 登录163邮箱网页版
  2. 设置 → POP3/SMTP/IMAP
  3. 开启"IMAP/SMTP服务"
  4. 发送短信获取授权码

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

监控原理

  1. 定时访问 - 每60秒可配置访问一次成绩页面
  2. 解析成绩 - 提取总绩点和每门课程信息
  3. 智能对比 - 对比课程列表,检测新增课程
  4. 邮件通知 - 发现新课程立即发送邮件

故障排查

快速诊断工具

如果遇到问题,使用诊断脚本快速检查:

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

可能原因:

  1. BeautifulSoup 库未安装
  2. 登录会话失效
  3. 网页结构变化

详细解决方案: 查看 故障排查指南.md

问题:登录失败

解决:

  1. 检查 config.ini 中的用户名密码
  2. 手动登录网页版确认账号正常
  3. 查看 .debug_response.html 了解实际响应

问题:邮件发送失败

解决:

  1. 确认使用SMTP授权码不是邮箱密码
  2. 检查163邮箱是否开启SMTP服务
  3. 查看 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
No description provided
Readme 128 KiB
Languages
Python 83.7%
Shell 15.1%
Dockerfile 1.2%