SJTU サインイン監視(上海交通大学 Canvas 用)

Tool

概要

このリポジトリは、上海交通大学(SJTU)の Canvas プラットフォームで表示される「签到号」(サインイン番号)を自動で監視する Python スクリプトを提供します。Selenium を用いて Chrome ブラウザを起動し、ユーザーが手動で JAccount にログインするのを待ったのち、サインイン情報を含む iframe に切り替えて表の先頭行を巡回し、サインイン番号を抽出・比較します。番号に変化があれば音声アラートで通知するシンプルな仕組みで、授業や課題の出席番号が公開された瞬間に気づきたい学生向けのツールです。導入は比較的容易で、スクリプトの流れが単一ファイルにまとまっているため改修もしやすい設計になっています(約300字)。

GitHub

リポジトリの統計情報

  • スター数: 5
  • フォーク数: 0
  • ウォッチャー数: 5
  • コミット数: 2
  • ファイル数: 2
  • メインの言語: Python

主な特徴

  • Selenium と ChromeDriver を使用したブラウザ操作による自動監視
  • JAccount の手動ログイン完了を待ってから監視を開始するフロー
  • iframe 内のテーブル行を解析してサインイン番号を抽出
  • 番号変化検出時に音声アラートでユーザーに通知

技術的なポイント

このプロジェクトは単一の監視クラス SigninMonitorV3 を中心に設計されており、実装上の注目点は次の通りです。

  1. ドライバ初期化とオプション設定: setup_driver() で ChromeDriver を起動し、ウィンドウやヘッドレス設定、タイムアウトなどのブラウザオプションを整えます。ユーザー環境に依存するため、プロファイル指定やヘッドレスの切り替えが可能であれば使い勝手が向上します。

  2. 手動ログイン待ちの戦略: Canvas は JAccount などのシングルサインオンを利用するため、自動ログインを避けてユーザーの手動入力を前提に wait_for_manual_login() を用いてログイン完了まで待機します。要素の存在や URL 変更でログイン完了を判断する実装が一般的で、安定化のためのタイムアウトや再試行処理が組まれています。

  3. iframe の検出と切り替え: Canvas 内のサインイン情報は iframe に埋め込まれていることがあるため、find_and_switch_to_signin_iframe() で対象 iframe を探索し、driver.switch_to.frame() でコンテキストを切り替えます。iframe の特定には id や src、内部のテーブル構造を手がかりにする実装が有効ですが、UI 変更に弱い点には注意が必要です。

  4. テーブル解析による番号抽出: get_signin_number_from_first_rows() は、ページ内の複数テーブルを走査して各テーブルの最初の行からサインイン番号を抜き出します。HTML の構造に依存するためセレクタはできるだけ汎用的にし、例外発生時にはログを残して継続する堅牢性を持たせるのが望ましいです。

  5. 監視ループとアラート: check_signin_number() が単一の監視サイクルを実行し、前回値と比較して変化があれば音声でアラート(playsound/winsound 等)を鳴らします。ポーリング間隔や最大監視時間、例外発生時のリカバリ戦略(ドライバ再起動や再ログイン促進)を設定すると実運用での安定性が高まります。

  6. 拡張余地: 現状はローカルで音を鳴らす単純通知ですが、将来的には Telegram/WeChat/メールなど外部通知連携、Canvas API の利用(利用可能ならば安定的なデータ取得手段)や Docker コンテナ化、ヘッドレス運用の強化、セレクタの耐久性向上(XPath の見直しや CSS クラスの抽象化)などが有効です。

(上記は実装方針と注意点を中心に約700字で説明しています。)

プロジェクトの構成

主要なファイルとディレクトリ:

  • Readme.md: file
  • signin_monitor_v3.py: file

まとめ

シンプルで実用的な Canvas 用サインイン番号監視ツール。学内の出席通知を見逃したくない学生に有用です(約50字)。

リポジトリ情報:

READMEの抜粋:

上海交通大学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()单次完整检查流程…