authenticated-web-scraper について
authenticated-web-scraperは、WSL2からユーザーのWindows版EdgeとChrome DevTools Protocolを使い、認証が必要なサイトを取得するスキルです。ページ内容やリンクを抽出し、設定した深さまでナビゲーションをたどれます。
主な機能
- 01Edgeのログインセッションを利用
- 02CDP経由でテキストとHTMLを抽出
- 03リンク収集とナビゲーション巡回
- 04ページ内容と一覧JSONを出力
- 05WSL2からWindows側でスクリプト実行
活用シーン
- 01企業認証が必要なドキュメントサイトの複製
- 022FAやSSOが必要なページの取得
- 03ページのテキスト・HTML・リンク抽出
- 04サイトナビゲーションに沿ったページ整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rysweet/ amplihack --skill authenticated-web-scraperインストール後、Claude Code で/authenticated-web-scraperを入力して読み込まれたか確認します。
同梱ファイルscripts/launch_edge_debug.mjsscripts/scrape_site.mjs
詳細
認証済みウェブスクレイパー
目的
Chrome DevTools Protocol(CDP)を介してユーザーの Windows Edge ブラウザーを利用し、認証が必要なウェブサイト(2FA、SSO、社内ログイン)のコンテンツをスクレイピングします。Playwright や Puppeteer から Windows ブラウザーのポートに直接アクセスできない WSL2 環境向けに設計されています。
使用する場面
- 企業認証で保護された社内ドキュメントサイトをミラーリングする
- 自動化できない 2FA/SSO が必要なサイトからコンテンツをスクレイピングする
- 認証済みウェブページから構造化コンテンツ(テキスト、HTML、リンク)を抽出する
- サイトのナビゲーションツリーをクロールし、設定可能な深さまでリンクをたどる
アーキテクチャ
WSL2 Windows
┌─────────────────┐ ┌──────────────────────┐
│ Claude Code │ │ Edge Browser │
│ │ kill │ (user's profile) │
│ 1. Kill Edge ───┼──────────>│ │
│ │ launch │ │
│ 2. Launch Edge ─┼──────────>│ --remote-debug:9222 │
│ │ │ --debug-addr:0.0.0.0 │
│ [User auths │ │ │
│ in browser] │ │ CDP WebSocket on :9222│
│ │ cmd.exe │ │
│ 3. Run scraper ─┼──────────>│ node scraper.mjs │
│ │ │ connects localhost:9222│
│ 4. Read output <┼───────────│ writes to C:\Temp\... │
└─────────────────┘ └──────────────────────┘
重要なポイント:WSL2 から Windows の localhost:9222 には直接アクセスできません。スクレイパースクリプトは cmd.exe /c "node script.mjs" を使って Windows 側 で実行する必要があります。
クイックスタート
ユーザーから認証が必要なウェブサイトのスクレイピングを依頼された場合:
- 既存の Edge プロセスを終了し、デバッグフラグを付けて再起動します
- ユーザーが表示モードのブラウザーで認証します
- スクレイパースクリプトを Windows の一時フォルダーにコピーし、
cmd.exe経由で実行します - スクリプトが CDP に接続し、ページに移動してコンテンツを抽出します
- 共有ファイルシステム(
/mnt/c/Temp/...)から結果を読み取ります
基本的なワークフロー
フェーズ 0:前提条件
- Windows に Node.js がインストールされている必要があります(
cmd.exe /c "where node") - Windows 側に
wsnpm パッケージが必要です(cmd.exe /c "cd C:\Temp && npm install ws") - Edge ブラウザーがインストールされている必要があります(
/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exeを確認します)
フェーズ 1:リモートデバッグを有効にして Edge を起動
import { execSync, spawn } from "child_process";
// CRITICAL: Kill ALL Edge processes first, otherwise debug flags are ignored
execSync('cmd.exe /c "taskkill /F /IM msedge.exe /T"');
await sleep(3000);
const EDGE = "/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe";
spawn(
EDGE,
[
"--remote-debugging-port=9222",
"--remote-debugging-address=0.0.0.0",
"--remote-allow-origins=*",
targetUrl,
],
{ detached: true, stdio: "ignore" }
).unref();
フェーズ 2:CDP とユーザー認証を確認
# Verify CDP is running (must query from Windows side)
powershell.exe -Command "Invoke-RestMethod -Uri http://localhost:9222/json/version"
ユーザーに認証を依頼し、コンテンツが表示されることを確認します。
フェーズ 3:CDP 経由でスクレイピング
次の処理を行う Node.js スクリプトを作成します。
http://localhost:9222/json/listを照会して、開いているページを取得します- WebSocket(
wsパッケージ)経由で対象ページに接続します Runtime.evaluateを使って DOM コンテンツを抽出しますPage.navigateとPage.enableを使ってクロールします- ページごとに
.txt(整形済みテキスト)、.html(完全な HTML)、_links.jsonを保存します
Windows 側で実行します。
cp script.mjs /mnt/c/Temp/scraper.mjs
cmd.exe /c "cd C:\Temp && node scraper.mjs C:\Temp\output" 2>&1
フェーズ 4:ナビゲーションをクロール
- 最初のページからサイドバー/ナビゲーションのリンクを抽出します
- 同一ドメインのページに絞り込みます(アンカーリンクは除外します)
- 各ナビゲーションページにアクセスし、コンテンツとリンクを抽出します
- 見つかったリンクを 1 階層分たどります(重複を除外します)
- ページ一覧を含むサマリー JSON を書き出します
CDP コマンドリファレンス
// Navigate to a page
await cdpSend(ws, "Page.navigate", { url });
// Extract text content
await cdpSend(ws, "Runtime.evaluate", {
expression: 'document.querySelector("main").innerText',
returnByValue: true,
});
// Extract links as JSON
await cdpSend(ws, "Runtime.evaluate", {
expression:
'JSON.stringify([...document.querySelectorAll("a[href]")].map(a => ({href: a.href, text: a.textContent.trim()})))',
returnByValue: true,
});
// Get full HTML
await cdpSend(ws, "Runtime.evaluate", {
expression: "document.documentElement.outerHTML",
returnByValue: true,
});
重要な詳細
- 最初に Edge を終了する必要があります:Edge がすでに実行中の場合、新しいインスタンスは既存のプロセスに合流し、
--remote-debugging-portを無視します - WSL2 のネットワーク:WSL2 は独自のネットワークスタックを持つため、WSL 内の
127.0.0.1から Windows にはアクセスできません。スクリプトはcmd.exe経由で Windows 上で実行する必要があります - 節度あるクロール:ページの読み込みの間に 2 秒の遅延を追加します
- 認証の保持:Edge はユーザーのデフォルトプロファイルを使用し、保存済みセッションを利用します
- 出力先:スクリプトでは Windows のパス(
C:\Temp\...)を使い、WSL からは/mnt/c/Temp/...経由で読み取ります
連携ポイント
- 企業認証(SSO、SAML、FIDO2 など)で保護されたあらゆるドキュメントサイトで動作します
- 出力は、分析、要約、ナレッジベースの構築を行う他のスキルに渡せます
investigation-workflowおよびknowledge-builderスキルとの併用に適しています
コメント
Markdown 対応