Skip to content
 
 

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

上海交通大学Canvas签到号监控脚本

📖 项目简介

这是一个基于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。

🚀 操作流程

1. 环境准备

# 安装依赖包
pip install selenium webdriver-manager

2. 运行脚本

正常监控模式:

python signin_monitor_v3.py

调试分析模式(首次使用推荐):

python signin_monitor_v3.py --analyze

3. 操作步骤

  1. 脚本启动:运行脚本后,会自动打开Chrome浏览器
  2. 手动登录
    • 浏览器访问上海交通大学Canvas页面
    • 手动完成JAccount登录(输入用户名、密码和验证码,或jaccount二维码登录)
    • 等待页面完全加载,看到签到界面
  3. 开始监控:回到命令行窗口,按回车键开始监控
  4. 监控运行:脚本自动定期检查签到号变化
  5. 停止监控:按 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,随后按照以下逻辑提取签到号:

  1. 遍历所有表格:查找页面中的所有<table>元素
  2. 检查第一行:对每个表格,检查第一行内容
  3. 智能判断
    • 纯文字行(如表头)→ 跳过此表格
    • 纯数字行 → 直接作为签到号
    • 包含数字的混合行 → 提取第一个数字作为签到号
  4. 备用方案:如果所有表格第一行都是文字,使用备用查找方法

⚠️ 注意事项

  1. 登录状态:JAccount登录会话可能过期,长时间运行后可能需要重新登录
  2. 网络要求:确保稳定的网络连接
  3. 频率设置:检查间隔不宜过短(建议10秒以上),避免对服务器造成压力
  4. 浏览器兼容:确保Chrome浏览器已安装并更新到最新版本
  5. 文件生成:调试时会生成以下文件:
    • 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:本说明文档

🎯 使用建议

  1. 首次使用:先运行分析模式了解页面结构
  2. 监控期间:保持计算机运行,不要关闭浏览器窗口
  3. 调整频率:根据实际需要调整检查间隔,避免过于频繁
  4. 查看日志:关注控制台输出,了解脚本运行状态

此脚本专为上海交通大学Canvas系统设计,可根据实际页面结构调整解析逻辑。

About

基于Python Selenium的自动化监控脚本,用于监控上海交通大学Canvas系统中的签到号变化。当检测到签到号发生变化时,脚本会发出声音警报提醒用户。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages