【要約】【Python】PlaywrightでManabaの課題を自動取得するアプローチ [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
大学の学生が、学習管理システムManabaの機能不足により、課題管理に苦慮している。Manabaは外部連携が乏しく、課題のリマインドが困難なため、以下の課題が存在する。
- ・SAML認証の壁:一度限りの認証鍵を用いる方式のため、単純なHTTP Requestではログインが困難である。
- ・Cookie管理の限界:持続的なログイン状態を維持する実装が、標準的なリクエスト手法では難しい。
- ・情報の非構造化:課題の詳細や締切がWeb画面上に散在しており、手動での集計に手間がかかる。
// Approach
開発者が、Playwrightを活用して人間がブラウザを操作する環境を再現し、課題情報の自動取得を試みた。具体的な手法は以下の通りである。
- ・ブラウザ自動化:PlaywrightでChromiumを制御し、ユーザーIDとパスワードによるログインを自動化する。
- ・リンクの特定:課題一覧のテーブルから、タイトル部分のリンクを正確に抽出するロジックを実装する。
- ・多段階フォールバック:説明文の取得において、複数のCSSセレクタを順次試行し、取得率を高める。
- ・多形式出力:取得したデータを、詳細JSON、統計JSON、および分析用CSVの3形式で保存する。
// Result
開発者が、Manaba上の課題情報を構造化データとして取得することに成功した。この成果により、以下の活用が可能となる。
- ・タスク管理の自動化:取得したJSONデータをn8n等のツールへ渡し、TODOリストへ自動追加できる。
- ・学習計画の最適化:CSV形式のデータを用いることで、締切日や課題タイプに基づいた分析が可能になる。
- ・運用の展望:現在はローカル環境での動作だが、サーバー化による常時稼働も視野に入れている。
Senior Engineer Insight
> 本手法は、APIが欠如したレガシーなシステムに対する現実的な解である。特に、SAML認証のような複雑なフローを回避するためにブラウザ自動化を選択した判断は実戦的だ。ただし、DOM構造への強い依存は、サイト更新時にスクリプトが即座に破損するリスクを孕む。運用フェーズでは、セレクタの変更を検知する監視や、環境変数による認証情報の厳格な管理が不可欠である。また、time.sleepによる負荷軽減は最低限の措置であり、大規模な実行時にはサーバーへの影響をより慎重に評価すべきだ。