这是一个基于Python Selenium的自动化监控脚本,用于监控上海交通大学Canvas系统中的签到号变化。当检测到签到号发生变化时,脚本会发出声音警报提醒用户。
| 模块/方法 | 功能说明 |
|---|---|
SigninMonitorV3 |
主监控类,包含所有监控逻辑 |
setup_driver() |
初始化Chrome浏览器驱动,配置浏览器选项 |
wait_for_manual_login() |
等待用户手动完成JAccount登录 |
find_and_switch_to_signin_iframe() |
查找并切换到包含签到信息的iframe |
get_signin_number_from_first_rows() |
检查所有表格第一行,提取签到号 |
check_signin_number() |
单次完整检查流程 |
run_monitoring() |
主监控循环,定期执行检查 |
alert_sound() |
发出警报声音(支持Windows/macOS/Linux) |
analyze_table_structure(): 调试函数,详细分析页面表格结构fallback_find_signin_number(): 备用签到号查找方法
在 SigninMonitorV3.__init__() 中可调整以下参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
check_interval |
15 | 检查频率(秒)。注意: 输出示例中设置为1秒仅用于演示,实际使用建议设置为10-30秒,避免频繁请求 |
target_url |
https://oc.sjtu.edu.cn/courses/... |
目标页面地址,可根据需要修改课程ID和工具ID |
当然,你也可以在函数中 else 分支修改默认URL。
如何获取监测URL?在Canvas上点击你正在上的课程,点击“点名签到”,该界面下的网址即为监测URL。
# 安装依赖包
pip install selenium webdriver-manager正常监控模式:
python signin_monitor_v3.py调试分析模式(首次使用推荐):
python signin_monitor_v3.py --analyze- 脚本启动:运行脚本后,会自动打开Chrome浏览器
- 手动登录:
- 浏览器访问上海交通大学Canvas页面
- 手动完成JAccount登录(输入用户名、密码和验证码,或jaccount二维码登录)
- 等待页面完全加载,看到签到界面
- 开始监控:回到命令行窗口,按回车键开始监控
- 监控运行:脚本自动定期检查签到号变化
- 停止监控:按 Ctrl+C 停止脚本
🎯 目标URL: https://oc.sjtu.edu.cn/courses/...
⏰ 检查频率: 15秒
============================================================
上海交通大学签到号监控系统 V3.1
============================================================
✅ 浏览器驱动初始化成功
============================================================
手动登录指引
============================================================
1. 浏览器将打开上海交通大学Canvas页面
2. 请完成JAccount登录(用户名、密码、验证码)
3. 等待页面完全加载,直到看到签到界面
4. 最后,回到此命令行窗口按回车键继续
============================================================
🌐 正在访问: https://oc.sjtu.edu.cn/courses/...
⏳ 页面已加载,请开始登录...
✅ 登录完成后,请按回车键继续程序...
🎯 开始监控签到号变化
📈 检查频率: 每15秒一次
按下 Ctrl+C 停止监控
[11:33:43] 第 1 次检查
🔄 刷新页面...
🔍 查找签到iframe...
找到 2 个iframe
iframe 1: about:blank
iframe 2: about:blank
✅ 已切换到第 2 个iframe,内容包含签到信息
💾 已保存iframe内容到 iframe_content.html
📊 检查所有表格的第一行...
找到 0 个表格
⚠️ 未找到任何表格,尝试其他查找方式...
🔄 使用备用方法查找签到号...
❌ 备用方法也未找到签到号
⚠️ 未找到签到号
⏳ 下次检查倒计时: 1秒
[11:34:09] 第 2 次检查
🔄 刷新页面...
🔍 查找签到iframe...
找到 2 个iframe
iframe 1: about:blank
iframe 2: about:blank
✅ 已切换到第 2 个iframe,内容包含签到信息
💾 已保存iframe内容到 iframe_content.html
📊 检查所有表格的第一行...
找到 0 个表格
⚠️ 未找到任何表格,尝试其他查找方式...
🔄 使用备用方法查找签到号...
❌ 备用方法也未找到签到号
⚠️ 未找到签到号
⏳ 下次检查倒计时: 1秒
[11:34:36] 第 3 次检查
🔄 刷新页面...
🔍 查找签到iframe...
找到 2 个iframe
iframe 1: about:blank
iframe 2: about:blank
✅ 已切换到第 2 个iframe,内容包含签到信息
💾 已保存iframe内容到 iframe_content.html
📊 检查所有表格的第一行...
找到 2 个表格
检查表格 1:
此表格有 1 行
第一行文本: '签到号 状态 创建时间'
⏭️ 第一行为纯文字,跳过此表格
检查表格 2:
此表格有 7 行
第一行文本: '7
已签到
2025-12-17 09:58:43'
✅ 第一行包含数字: ['7', '2025', '12', '17', '09', '58', '43']
🔍 第一行包含数字但不是纯数字
✅ 初始签到号: 7
⏳ 下次检查倒计时: 1秒
[11:35:02] 第 4 次检查
🔄 刷新页面...
🔍 查找签到iframe...
找到 2 个iframe
iframe 1: about:blank
iframe 2: about:blank
✅ 已切换到第 2 个iframe,内容包含签到信息
💾 已保存iframe内容到 iframe_content.html
📊 检查所有表格的第一行...
找到 2 个表格
检查表格 1:
此表格有 1 行
第一行文本: '签到号 状态 创建时间'
⏭️ 第一行为纯文字,跳过此表格
检查表格 2:
此表格有 7 行
第一行文本: '7
已签到
2025-12-17 09:58:43'
✅ 第一行包含数字: ['7', '2025', '12', '17', '09', '58', '43']
🔍 第一行包含数字但不是纯数字
📊 签到号未变: 7
⏳ 下次检查倒计时: 1秒
🛑 监控已停止
🧹 正在清理资源...
✅ 浏览器已关闭
📊 监控统计:
检查次数: 4
最后签到号: 7
输出会给出详细的监控信息。请注意, 脚本不会立即检测到签到号。
脚本先提取签到界面的表格所在的可能的URL,随后按照以下逻辑提取签到号:
- 遍历所有表格:查找页面中的所有
<table>元素 - 检查第一行:对每个表格,检查第一行内容
- 智能判断:
- 纯文字行(如表头)→ 跳过此表格
- 纯数字行 → 直接作为签到号
- 包含数字的混合行 → 提取第一个数字作为签到号
- 备用方案:如果所有表格第一行都是文字,使用备用查找方法
- 登录状态:JAccount登录会话可能过期,长时间运行后可能需要重新登录
- 网络要求:确保稳定的网络连接
- 频率设置:检查间隔不宜过短(建议10秒以上),避免对服务器造成压力
- 浏览器兼容:确保Chrome浏览器已安装并更新到最新版本
- 文件生成:调试时会生成以下文件:
iframe_content.html:iframe页面内容(用于分析页面结构)- 调试模式下还会生成更详细的页面分析文件
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 找不到iframe | 1. 页面未完全加载 2. iframe结构变化 3. 登录失败 |
1. 增加等待时间 2. 运行分析模式查看结构 3. 检查是否成功登录 |
| 找不到签到号 | 1. 表格结构变化 2. 签到号不在第一行 |
1. 查看生成的HTML文件 2. 调整表格解析逻辑 |
| 脚本卡住 | 1. 网络问题 2. 页面加载超时 |
1. 检查网络连接 2. 按Ctrl+C停止后重试 |
signin_monitor_v3.py:主脚本文件iframe_content.html:运行时自动保存的iframe内容(调试用)README.md:本说明文档
- 首次使用:先运行分析模式了解页面结构
- 监控期间:保持计算机运行,不要关闭浏览器窗口
- 调整频率:根据实际需要调整检查间隔,避免过于频繁
- 查看日志:关注控制台输出,了解脚本运行状态
此脚本专为上海交通大学Canvas系统设计,可根据实际页面结构调整解析逻辑。