Chromium URLで
フラットなHTTP APIで制御できるヘッドレスまたは表示可能なChromium。デフォルトでステルスモードが有効で、/startでCDP WebSocket URLを返します — PuppeteerやPlaywright、任意のCDPクライアントから接続できます。
# ステルスChromiumをフィンガープリント付きで起動
$ curl "/start?browser_id=main&stealth=true&timezoneId=America/New_York&locale=en-US"
[ "browser_id": "main",
"webSocketDebuggerUrl": "ws://.../devtools/browser/...",
"stealth": true ]
# ナビゲート — またはWS URLをPuppeteerに渡す
$ curl "/browse?browser_id=main&url=https://hoody.com"
200 OK
# キャプチャ — 既存のCDPクライアントでそのまま動作
$ curl "/screenshot?browser_id=main&format=png" -o shot.png
1920x1080 PNG
HTTP経由で実際のブラウザーを操作・観察・検査
すべてのBrowserインスタンスは、PuppeteerやPlaywrightが依存するプリミティブ — ナビゲーション、DOM評価、スクリーンショット、DevTools Protocol — をフラットなHTTPエンドポイントとして公開します。以下のタブで、どのエンドポイントが実行されるかを確認できます。
インスタンスを起動してURLに移動
GET /startがフィンガープリント付きのステルスChromiumを起動します。GET /browse?url=…でページをロードします。HTTPのラウンドトリップ1回で完了 — ドライバーのインストールも、Dockerイメージの管理も不要です。
ページ内でJSを評価し、構造化データを返す
POST /evalはページコンテキストで任意のJavaScriptを実行します。GET /htmlとGET /textはレンダリングされたDOMと表示テキストを返します。セレクターライブラリもヘッドレスブラウザーSDKも不要です。
現在のページをスクリーンショットまたはPDFに変換
GET /screenshotはPNG、JPEG、またはbase64形式で返します — fullPageまたはビューポート。GET /pdfはA4/Letterでレンダリングし、横向きとマージンに対応しています。バイナリが直接返ります — ヘッドレスChromeのフラグは不要です。
CDP URLを取得して任意のツールに渡す
GET /devtools-urlは3つのURLを返します: CDP WebSocket(Puppeteer / Playwright / 任意のCDPクライアント用)、DevTools HTTP API、DevToolsフロントエンドUI。フロントエンドURLをブラウザーのタブで開くと、ヘッドレスインスタンスの表示を確認できます。
スクリーンショット → 判断 → クリックのループ
Computer-Useモデルが期待する形: スクリーンショット、DOMスナップショット、(x, y)でのクリック方法。BrowserはこれをプレーンHTTPで公開 — Claude Computer Use、OpenAIのOperator、または独自のエージェントのバックエンドとして使えます。
docker run chromium + fonts + fingerprint patches
curl /start?stealth=true → 準備完了
HTTP経由でChromiumを起動・操作・終了
すべてのエンドポイントは決定論的なJSONまたはバイナリを返します。stderrのスクレイピング、/tmpファイル、フラッシュを忘れたサブプロセスとの競合状態は不要です。
# Browserの完全なフロー — 起動、ナビゲート、抽出、シャットダウン
URL="https://proj-dev-browser-1.hoody.com"
ID="main"
# 1. ステルスChromiumを起動
curl -s "$URL/start?browser_id=$ID&stealth=true"
# 2. ナビゲート
curl -s "$URL/browse?browser_id=$ID&url=https://hoody.com"
# 3. 構造化データを抽出
curl -s -X POST "$URL/eval?browser_id=$ID" \
-H 'Content-Type: application/json' \
-d '["script":"document.title"]'
# > "Example Domain"
# 4. スロットを解放
curl -s "$URL/shutdown?browser_id=$ID"
// Browserの完全なフロー — 起動、ナビゲート、抽出、シャットダウン
const BASE = 'https://proj-dev-browser-1.hoody.com';
const id = 'main';
// 1. ステルスChromiumを起動
const start = await fetch(`$[BASE]/start?browser_id=$[id]&stealth=true`);
const [ webSocketDebuggerUrl ] = await start.json();
// 2. ナビゲート
await fetch(`$[BASE]/browse?browser_id=$[id]&url=https://hoody.com`);
// 3. 構造化データを抽出
const r = await fetch(`$[BASE]/eval?browser_id=$[id]`, [
method: 'POST',
headers: [ 'Content-Type': 'application/json' ],
body: JSON.stringify([ script: 'document.title' ])
]);
const title = await r.json();
// => "Example Domain"
// 4. スロットを解放
await fetch(`$[BASE]/shutdown?browser_id=$[id]`);
# Browserの完全なフロー — 起動、ナビゲート、抽出、シャットダウン
import requests
BASE = 'https://proj-dev-browser-1.hoody.com'
id = 'main'
# 1. ステルスChromiumを起動
start = requests.get(f'[BASE]/start', params=['browser_id': id, 'stealth': 'true'])
ws = start.json()['webSocketDebuggerUrl']
# 2. ナビゲート
requests.get(f'[BASE]/browse', params=['browser_id': id, 'url': 'https://hoody.com'])
# 3. 構造化データを抽出
r = requests.post(f'[BASE]/eval',
params=['browser_id': id],
json=['script': 'document.title'])
title = r.json()
# => "Example Domain"
# 4. スロットを解放
requests.get(f'[BASE]/shutdown', params=['browser_id': id])
チームがBrowserをデプロイする場面
ChromiumへのフラットなHTTP層により、ローカルインストールのヘッドレスブラウザーでは対応できない統合ポイントが開かれます。よく見られる6つのデプロイ形態です。
データパイプライン
レンダリングされたHTMLとJSONをウェアハウスに取り込みます。/evalコールをcronで実行し、結果をSnowflake、BigQuery、またはPostgresに流せます。ワーカーごとのChromiumインストールも、クラスター間のバージョンドリフトも不要です。
エージェントフレームワーク
Claude Computer Use、OpenAI Operator、またはLangChainのブラウザーツールに接続できます。スクリーンショット + evalは既に期待される形 — Browserはどのエージェントランタイムでも使えるドロップインHTTPエンドポイントです。
認証済みワークフロー
ログイン済みのダッシュボード — SaaSの管理パネル、銀行ポータル、内部ツール — を操作できます。POST /cookiesでセッションを永続化するため、後続の呼び出しでは再認証なしにIDが維持されます。
レビューアプリ
PRごとのブラウザープレビュー。CIがステージングビルドに対してBrowserインスタンスを起動し、PRコメントに/devtools-urlのフロントエンドリンクを返します。レビュアーはワンクリックでアプリをライブで確認できます。
スケジュール監視
cronトリガーの/screenshotと/networkキャプチャをアップタイム、SLO、パフォーマンスダッシュボードに記録します。各プローブのコンソールとネットワークエントリの最新500件をリングバッファに保存 — ユーザーより先に回帰を検出します。
コンプライアンススナップショット
法的、監査、または証拠ワークフロー向けに、タイムスタンプ付きのフィンガープリントロック済みサードパーティページキャプチャを提供します。Chromiumチャンネル、ビューポート、ジオロケーションを固定 — 数ヶ月後でも全く同じレンダリングを再現できます。
23の操作、4つのエンドポイントグループ
すべてのBrowser機能はフラットなHTTP呼び出しです。同じパスのメソッドバリアントは動作が異なるため個別に掲載しています — GET /evalはワンショットスクリプトを実行し、POST /evalはフルボディを受け付けます。
インタラクション
[count, plural, one [# endpoint] other [# endpoints]]'curl -X POST /eval -d '["script":"document.title"]' → "Example"
セッション状態
[count, plural, one [# endpoint] other [# endpoints]]'curl -X POST /cookies -d '[[name,value,domain,...]]' → [ added: 4 ]
イントロスペクション
[count, plural, one [# endpoint] other [# endpoints]]'curl /devtools-url?browser_id=main → [ ws, http, frontend ]
ライフサイクル
[count, plural, one [# endpoint] other [# endpoints]]'curl /start?browser_id=main&stealth=true → [ ws, stealth: true ]
さらに、すべてのHoody KitサービスにはGET /healthとGET /metricsがプラットフォームから提供されます。
ステルス、フィンガープリント、CDP — セットアップコストなし
Browserはchromium上の薄いレイヤーです — インストール、パッチ適用、管理が必要なものはすべてクエリパラメーターで指定できます。実際に本番環境で重要な6つの機能です。
フィンガープリントスプーフィング
/startでUA、ビューポート、タイムゾーン、ロケール、ジオロケーションを設定 — またはfingerprintIdでプリセットJSONをロードできます。CanvasとWebGLは自動的にプロファイルに従います。
ステルスモード
ChromiumにはPatchrightの検出回避機能がデフォルトで有効です。すべての検出ベンダーに対して万全ではありません — 敵対的なサイトではCAPTCHA解決プロバイダーと組み合わせてください。
CDPパススルー
GET /devtools-urlはWebSocket URL、DevTools HTTP API、フロントエンドUIを返します。既存のPuppeteerまたはPlaywrightのコードはそのまま動作 — 接続するだけで書き直し不要です。
プロキシとDoH
認証とバイパスリスト付きのSOCKS5、SOCKS5h、HTTP、HTTPSプロキシ。CloudflareによるDNS-over-HTTPSがデフォルトで有効。QUIC/HTTP3はインスタンスごとにオプトイン可能。
Chromiumチャンネル
Chromiumビルドを固定 — フルバージョン文字列、メジャーバージョン、またはチャンネル(stable / beta / dev / canary)。browser=firefoxでFirefoxも対応しています。
デバッグリングバッファ
インスタンスごとに最新500件のコンソールエントリと500件のネットワークエントリ、さらにクエリと削除エンドポイント付きの永続ブラウジング履歴。外部ログレイヤーを組み込む必要はありません。
スタックに本物のブラウザーを追加
Browserはすべてのコンテナに付属するHoody Kitサービスの1つです。ドライバーインストール、Puppeteerのスキャフォールド、フィンガープリントパッチは不要です。URLから始めましょう。