mcpField
W
web-fetch

web-fetch

github.com/creminiai生産性38 回インストール
リポジトリ

web-fetch について

Web Fetchは、ヘッドレスChromeでウェブページを取得し、読みやすいテキストを抽出するPythonスキルです。JavaScript描画ページやリダイレクト、複数URLを扱うワークフロー向けで、外部APIは不要です。

主な機能

  1. 01ヘッドレスChromeでページを取得
  2. 02JavaScriptによる動的コンテンツの描画
  3. 03リダイレクトとSPAルーティングへの対応
  4. 041つのセッションで複数URLを処理
  5. 05テキストまたはJSONで出力

活用シーン

  1. 01JavaScriptを多用するページからテキストを抽出
  2. 02リダイレクトされるニュースリンクの解決
  3. 03分析用のURLをまとめて取得
  4. 04構造化した取得結果をファイルに保存

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/creminiai/cremini-skills --skill web-fetch

インストール後、Claude Code で/web-fetchを入力して読み込まれたか確認します。

同梱ファイルscripts/web_fetch.py

詳細

Web Fetch

**Chrome DevTools Protocol(CDP)**を介してヘッドレス Chrome インスタンスを操作し、JavaScript を完全にレンダリングして Web ページを取得します。JavaScript によるリダイレクト、SPA、動的コンテンツに対応し、あらゆる URL からテキストを抽出します。

前提条件

  • Google Chrome または Chromium:システムにインストールされている必要があります。
    • macOS:brew install --cask google-chrome
    • Ubuntu/Debian:sudo apt install google-chrome-stable
    • Windows:winget install Google.Chrome
  • Python 3:標準ライブラリのみを使用します。pip 依存関係はありません。必要に応じて、コンテンツ抽出の精度を高めるために trafilatura を使用できます。
  • API キーやトークンは必要ありません。

使用方法

単一の URL
python <skill-path>/scripts/web_fetch.py --url "https://example.com/article"
複数の URL(Chrome セッションを共有して効率化)
python <skill-path>/scripts/web_fetch.py --url "https://example.com/a" --url "https://example.com/b"
パイプ入力(1 行につき 1 つの URL)
echo "https://example.com/article" | python <skill-path>/scripts/web_fetch.py
ファイルへの JSON 出力(複数の URL に推奨)
# Cross-platform temp dir
TMPDIR=$(python -c "import tempfile; print(tempfile.gettempdir())")
python <skill-path>/scripts/web_fetch.py --url "https://example.com" --format json -o "$TMPDIR/results.json"

オプション

フラグデフォルト説明
--url—取得する URL(複数指定可能)
--formattext出力形式:text または json
-o, --outputstdoutstdout の代わりにファイルへ書き込みます(大きな結果に推奨)
--wait-ms1500JavaScript レンダリングの待機時間(ミリ秒)
--timeout15URL ごとのタイムアウト(秒)
--max-chars15000ページごとの最大文字数
--batch-size3バッチごとの URL 数(安定性のため、バッチ間で Chrome を再起動します)
--portautoCDP デバッグポート(デフォルト:空いているポートを自動検出)

出力

テキストモード(デフォルト)

各 URL のプレーンテキストコンテンツを --- で区切って出力します。

JSON モード
[
  {
    "url": "https://news.google.com/rss/articles/...",
    "final_url": "https://www.theguardian.com/actual-article",
    "success": true,
    "content": "Article text content..."
  }
]

失敗時:

[
  {
    "url": "https://example.com/broken",
    "success": false,
    "error": "Page load timeout"
  }
]

仕組み

  1. Chrome を検出 — プラットフォーム固有のパスを確認し、次に PATH を検索します
  2. 分離された Chrome を起動 — --headless=new --remote-debugging-port=PORT --user-data-dir=TMPDIR(起動中の Chrome と競合することはありません)
  3. CDP 経由で操作 — 依存関係のない純粋な Python 製 CDP クライアントを使い、WebSocket 経由で接続します
  4. 移動して待機 — Page.navigate を使用し、loadEventFired を待ち受けた後、JavaScript のレンダリングを待ちます
  5. コンテンツを取得 — Runtime.evaluate で最終 URL を取得し、DOM.getOuterHTML で DOM を抽出します
  6. テキストを抽出 — trafilatura(インストールされている場合)を使用し、ない場合は HTML タグを除去します
  7. 後処理 — Chrome を終了し、一時プロファイルを削除します

主な利点

  • プロファイルの競合なし — 分離された --user-data-dir を使用し、起動中の Chrome と並行して動作します
  • JavaScript によるリダイレクトに対応 — Google News、URL 短縮サービス、SPA のルーティングも動作します
  • 依存関係ゼロ — 純粋な Python 3 標準ライブラリを使用します(WebSocket クライアントを含む)
  • 単一の Chrome セッション — 複数の URL で 1 つのインスタンスを再利用します(高速)
  • クロスプラットフォーム — Mac、Windows、Linux

クロスプラットフォーム対応

プラットフォーム確認する Chrome のパス
macOS/Applications/Google Chrome.app/...、Chromium.app
Linux/usr/bin/google-chrome、chromium、snap chromium
Windows%ProgramFiles%\Google\Chrome\...、%LocalAppData%\...

すべてのプラットフォームで、見つからない場合は PATH を検索します。

注意事項

  • 設定は不要です — Chrome をインストールするだけで使用できます。「リモートデバッグ」を有効にしたり、Chrome の設定を変更したりする必要はありません。スクリプトがすべて自動的に処理します。
  • macOS での初回起動 — 「アプリケーション Google Chrome に受信ネットワーク接続を許可しますか?」というポップアップが表示される場合があります。許可をクリックしてください。CDP はローカルポート(127.0.0.1)を使用するためです。外部ネットワーク通信は発生しません。

コメント