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ファイル、フラッシュを忘れたサブプロセスとの競合状態は不要です。
# Full Browser flow — start, navigate, extract, shutdown
URL="https://abc123-def456-browser-1.node-us-1.containers.hoody.com"
ID="main"
# 1. Spawn a stealth Chromium (Patchright)
curl -s "$URL/start?browser_id=$ID&stealth=true"
# 2. Navigate to a page
curl -s "$URL/browse?browser_id=$ID&url=https://example.com"
# 3. Read the page title back
curl -s -X POST "$URL/eval?browser_id=$ID" \
-H 'Content-Type: application/json' \
-d '{"script":"document.title"}'
# > { "result": "Example Domain" }
# 4. Release the slot
curl -s "$URL/shutdown?browser_id=$ID"
// Full Browser flow — start, navigate, extract, shutdown
const BASE = 'https://abc123-def456-browser-1.node-us-1.containers.hoody.com';
const id = 'main';
// 1. Spawn a stealth Chromium (Patchright)
const start = await fetch(`${BASE}/start?browser_id=${id}&stealth=true`);
const { webSocketDebuggerUrl } = await start.json();
// 2. Navigate to a page
await fetch(`${BASE}/browse?browser_id=${id}&url=https://example.com`);
// 3. Read the page title back
const r = await fetch(`${BASE}/eval?browser_id=${id}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ script: 'document.title' })
});
const { result } = await r.json();
// => "Example Domain"
// 4. Release the slot
await fetch(`${BASE}/shutdown?browser_id=${id}`);
# Full Browser flow — start, navigate, extract, shutdown
import requests
BASE = 'https://abc123-def456-browser-1.node-us-1.containers.hoody.com'
id = 'main'
# 1. Spawn a stealth Chromium (Patchright)
start = requests.get(f'{BASE}/start', params={'browser_id': id, 'stealth': 'true'})
ws = start.json()['webSocketDebuggerUrl']
# 2. Navigate to a page
requests.get(f'{BASE}/browse', params={'browser_id': id, 'url': 'https://example.com'})
# 3. Read the page title back
r = requests.post(f'{BASE}/eval',
params={'browser_id': id},
json={'script': 'document.title'})
title = r.json()['result']
# => "Example Domain"
# 4. Release the slot
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はフルボディを受け付けます。
インタラクション
8 個のエンドポイントcurl /browse?browser_id=main&url=https://example.com → { tabId, url, created, reused }
セッション状態
5 個のエンドポイントcurl -X POST /cookies -d '{ cookies: [{ name, value, url }] }' → { added: 2 }
イントロスペクション
6 個のエンドポイントcurl /devtools-url?browser_id=main → { webSocketDebuggerUrl, devtoolsHttpUrl, devtoolsFrontendUrl }
ライフサイクル
5 個のエンドポイントcurl /start?browser_id=main&stealth=true → { browser_id, webSocketDebuggerUrl, stealth: true }
4 つの機能領域にまたがる 24 のエンドポイント。23 は表示されている短いパスで browser コンテナの URL に対して動作します。ヘルスチェックだけは例外で、中央 API の api.hoody.com/api/v1/browser/health から提供されます。メソッドはドキュメントに従います。browse と eval は GET と POST を受け付け、cookies は GET、POST、DELETE を加えます。
ステルス、フィンガープリント、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から始めましょう。