mcpField
A
authenticated-web-scraper

authenticated-web-scraper

github.com/rysweetデータ・データベース76120 回インストール21 週間前に更新
リポジトリ

authenticated-web-scraper について

authenticated-web-scraperは、WSL2からユーザーのWindows版EdgeとChrome DevTools Protocolを使い、認証が必要なサイトを取得するスキルです。ページ内容やリンクを抽出し、設定した深さまでナビゲーションをたどれます。

主な機能

  1. 01Edgeのログインセッションを利用
  2. 02CDP経由でテキストとHTMLを抽出
  3. 03リンク収集とナビゲーション巡回
  4. 04ページ内容と一覧JSONを出力
  5. 05WSL2からWindows側でスクリプト実行

活用シーン

  1. 01企業認証が必要なドキュメントサイトの複製
  2. 022FAやSSOが必要なページの取得
  3. 03ページのテキスト・HTML・リンク抽出
  4. 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 側 で実行する必要があります。

クイックスタート

ユーザーから認証が必要なウェブサイトのスクレイピングを依頼された場合:

  1. 既存の Edge プロセスを終了し、デバッグフラグを付けて再起動します
  2. ユーザーが表示モードのブラウザーで認証します
  3. スクレイパースクリプトを Windows の一時フォルダーにコピーし、cmd.exe 経由で実行します
  4. スクリプトが CDP に接続し、ページに移動してコンテンツを抽出します
  5. 共有ファイルシステム(/mnt/c/Temp/...)から結果を読み取ります

基本的なワークフロー

フェーズ 0:前提条件
  • Windows に Node.js がインストールされている必要があります(cmd.exe /c "where node")
  • Windows 側に ws npm パッケージが必要です(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 スクリプトを作成します。

  1. http://localhost:9222/json/list を照会して、開いているページを取得します
  2. WebSocket(ws パッケージ)経由で対象ページに接続します
  3. Runtime.evaluate を使って DOM コンテンツを抽出します
  4. Page.navigate と Page.enable を使ってクロールします
  5. ページごとに .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. 最初のページからサイドバー/ナビゲーションのリンクを抽出します
  2. 同一ドメインのページに絞り込みます(アンカーリンクは除外します)
  3. 各ナビゲーションページにアクセスし、コンテンツとリンクを抽出します
  4. 見つかったリンクを 1 階層分たどります(重複を除外します)
  5. ページ一覧を含むサマリー 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 スキルとの併用に適しています

コメント