このシリーズで解決すること
既存 Web システムの画面からフォーム項目を洗い出す作業は、 DB 設計やテスト設計の起点として避けられない。 しかし実際には「画面を手で開いて、項目名・型・バリデーションをスプレッドシートに転記する」という 非効率な手作業が横行している。
このシリーズでは Python で Web ページを解析し、INPUT 要素を自動的にエンティティとして抽出する 方法を体系的に解説する。抽出結果は JSON / CSV で出力でき、DB 定義書・テストケース・仕様書の素材として再利用できる。
📌 「エンティティとして抽出」とは
タグを検索して値を取り出すだけでなく、各 INPUT 要素を name / id / type / label / placeholder / required / options などの属性セットを持つ Python dataclass オブジェクト として扱うことを指す。このシリーズではその定義・収集・出力の全工程をカバーする。
ユースケース
完成イメージ
シリーズを通じて、以下のような Python スクリプトを段階的に組み立てる。 最終的には URL を渡すだけで JSON ファイルが出力されるツールが完成する。
from extractor import extract_inputs
# 静的ページ(requests + BeautifulSoup)
entities = extract_inputs("https://example.com/login")
# 動的ページ(Playwright)
entities = extract_inputs("https://example.com/search", dynamic=True)
# 結果を JSON 出力
import json
print(json.dumps([e.__dict__ for e in entities], ensure_ascii=False, indent=2))
上記スクリプトを実行すると、以下のような JSON が得られる。
[
{
"tag": "input",
"type": "text",
"name": "username",
"id": "username",
"label": "ユーザー名",
"placeholder": "例: taro_yamada",
"required": true,
"maxlength": "50",
"pattern": null,
"options": []
},
{
"tag": "input",
"type": "password",
"name": "password",
"id": "password",
"label": "パスワード",
"placeholder": null,
"required": true,
"maxlength": "128",
"pattern": null,
"options": []
},
{
"tag": "select",
"type": "select",
"name": "role",
"id": "role",
"label": "権限",
"placeholder": null,
"required": false,
"maxlength": null,
"pattern": null,
"options": ["管理者", "一般ユーザー", "閲覧のみ"]
}
]
対象読者・前提知識
| 項目 | レベル |
|---|---|
| Python 基礎 | for 文・関数・クラスが読める程度(3.9+) |
| HTML 知識 | <form> / <input> タグを知っている程度 |
| コマンドライン | pip コマンドが使える |
| Web スクレイピング | 経験不問(PART 02〜04 で環境構築から説明) |
シリーズ構成
| PART | タイトル | 内容 |
|---|---|---|
| 01 | はじめに(本記事) | 目的・ユースケース・完成イメージ |
| 02 | 環境準備 | Python・venv・requirements.txt |
| 03 | requests + BeautifulSoup | 静的ページ用ツールの導入 |
| 04 | Playwright | 動的ページ用ツールの導入 |
| 05 | INPUT 要素の整理 | 対象タグ・属性・dataclass 定義 |
| 06 | 静的ページ実装 | requests + BeautifulSoup で抽出 |
| 07 | 動的ページ実装 | Playwright で抽出・使い分け |
| 08 | 応用 | フォーム仕様書・テストケース生成 |
| 09 | トラブルシューティング | よくあるエラーと対処 |
| 10 | まとめ | 使い分け表・次のステップ |
✅ 次の章では…
PART 02 では Python のバージョン確認・仮想環境の作成・requirements.txt の整備など、シリーズ全体で共通して使う環境を整備します。