コンテンツにスキップ
URLとしてのChromium
フィンガープリントスプーフィング
タブ制御
スクリーンショットAPI
JavaScript評価
ネットワークインターセプション
Chrome DevTools Protocol
Puppeteer互換
URLとしてのChromium
フィンガープリントスプーフィング
タブ制御
スクリーンショットAPI
JavaScript評価
ネットワークインターセプション
Chrome DevTools Protocol
Puppeteer互換
URLとしてのChromium
フィンガープリントスプーフィング
タブ制御
スクリーンショットAPI
JavaScript評価
ネットワークインターセプション
Chrome DevTools Protocol
Puppeteer互換
URLとしてのChromium
フィンガープリントスプーフィング
タブ制御
スクリーンショットAPI
JavaScript評価
ネットワークインターセプション
Chrome DevTools Protocol
Puppeteer互換
BrowserKitサービス

Chromium URLで

フラットなHTTP APIで制御できるヘッドレスまたは表示可能なChromium。デフォルトでステルスモードが有効で、/startでCDP WebSocket URLを返します — PuppeteerやPlaywright、任意のCDPクライアントから接続できます。

abc123-def456-browser-1.node-us-1.containers.hoody.com
GET /start?browser_id=main&stealth=true&timezoneId=America/New_York
200 OK

# ステルス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

3つのエンドポイントクラス、1つのURL

HTTP経由で実際のブラウザーを操作・観察・検査

すべてのBrowserインスタンスは、PuppeteerやPlaywrightが依存するプリミティブ — ナビゲーション、DOM評価、スクリーンショット、DevTools Protocol — をフラットなHTTPエンドポイントとして公開します。以下のタブで、どのエンドポイントが実行されるかを確認できます。

01 / 05

インスタンスを起動してURLに移動

GET /startがフィンガープリント付きのステルスChromiumを起動します。GET /browse?url=…でページをロードします。HTTPのラウンドトリップ1回で完了 — ドライバーのインストールも、Dockerイメージの管理も不要です。

curl /start?stealth=true → 準備完了
02 / 05

ページ内でJSを評価し、構造化データを返す

POST /evalはページコンテキストで任意のJavaScriptを実行します。GET /htmlとGET /textはレンダリングされたDOMと表示テキストを返します。セレクターライブラリもヘッドレスブラウザーSDKも不要です。

POST /eval → [ "Headline 1", "Headline 2", … ]
03 / 05

現在のページをスクリーンショットまたはPDFに変換

GET /screenshotはPNG、JPEG、またはbase64形式で返します — fullPageまたはビューポート。GET /pdfはA4/Letterでレンダリングし、横向きとマージンに対応しています。バイナリが直接返ります — ヘッドレスChromeのフラグは不要です。

GET /screenshot?fullPage=true → PNGバイナリ
04 / 05

CDP URLを取得して任意のツールに渡す

GET /devtools-urlは3つのURLを返します: CDP WebSocket(Puppeteer / Playwright / 任意のCDPクライアント用)、DevTools HTTP API、DevToolsフロントエンドUI。フロントエンドURLをブラウザーのタブで開くと、ヘッドレスインスタンスの表示を確認できます。

GET /devtools-url → [ ws, http, frontend ]
05 / 05

スクリーンショット → 判断 → クリックのループ

Computer-Useモデルが期待する形: スクリーンショット、DOMスナップショット、(x, y)でのクリック方法。BrowserはこれをプレーンHTTPで公開 — Claude Computer Use、OpenAIのOperator、または独自のエージェントのバックエンドとして使えます。

ループ: screenshot → eval('click(x,y)')
· 従来のヘッドレス

docker run chromium + fonts + fingerprint patches

· Hoody Browser

curl /start?stealth=true → 準備完了

API

HTTP経由でChromiumを起動・操作・終了

すべてのエンドポイントは決定論的なJSONまたはバイナリを返します。stderrのスクレイピング、/tmpファイル、フラッシュを忘れたサブプロセスとの競合状態は不要です。

browser-api.sh

# 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"

browser-api.js

// 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}`);

browser_api.py

# 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つのデプロイ形態です。

{01}

データパイプライン

レンダリングされたHTMLとJSONをウェアハウスに取り込みます。/evalコールをcronで実行し、結果をSnowflake、BigQuery、またはPostgresに流せます。ワーカーごとのChromiumインストールも、クラスター間のバージョンドリフトも不要です。

{02}

エージェントフレームワーク

Claude Computer Use、OpenAI Operator、またはLangChainのブラウザーツールに接続できます。スクリーンショット + evalは既に期待される形 — Browserはどのエージェントランタイムでも使えるドロップインHTTPエンドポイントです。

{03}

認証済みワークフロー

ログイン済みのダッシュボード — SaaSの管理パネル、銀行ポータル、内部ツール — を操作できます。POST /cookiesでセッションを永続化するため、後続の呼び出しでは再認証なしにIDが維持されます。

{04}

レビューアプリ

PRごとのブラウザープレビュー。CIがステージングビルドに対してBrowserインスタンスを起動し、PRコメントに/devtools-urlのフロントエンドリンクを返します。レビュアーはワンクリックでアプリをライブで確認できます。

{05}

スケジュール監視

cronトリガーの/screenshotと/networkキャプチャをアップタイム、SLO、パフォーマンスダッシュボードに記録します。各プローブのコンソールとネットワークエントリの最新500件をリングバッファに保存 — ユーザーより先に回帰を検出します。

{06}

コンプライアンススナップショット

法的、監査、または証拠ワークフロー向けに、タイムスタンプ付きのフィンガープリントロック済みサードパーティページキャプチャを提供します。Chromiumチャンネル、ビューポート、ジオロケーションを固定 — 数ヶ月後でも全く同じレンダリングを再現できます。

API

23の操作、4つのエンドポイントグループ

すべてのBrowser機能はフラットなHTTP呼び出しです。同じパスのメソッドバリアントは動作が異なるため個別に掲載しています — GET /evalはワンショットスクリプトを実行し、POST /evalはフルボディを受け付けます。

インタラクション

8 個のエンドポイント

curl /browse?browser_id=main&url=https://example.com → { tabId, url, created, reused }

GET
/browse?url=browser_id、フィンガープリント、ステルス、プロキシ、ビューポートを指定してインスタンスを作成または再開。
POST
/browseインスタンスを一時停止 — 状態は維持されます。/restartで再開できます。
GET
/eval?script=停止して、オプションで更新した設定で再起動。
POST
/evalインスタンスを終了してスロットを解放。?force=trueでスタックしたインスタンスを強制終了。
GET
/htmlJSONボディでナビゲート — waitUntil、タイムアウト、リファラー、ヘッダーを指定可能。
GET
/textシェルからcurlで使いやすい省略ナビゲーション。
GET
/screenshotページコンテキストでJavaScript(プレーンまたはbase64)を実行し、結果を返す。
GET
/pdfdocument.titleのようなワンショット読み取り用のインラインスクリプト評価。

セッション状態

5 個のエンドポイント

curl -X POST /cookies -d '{ cookies: [{ name, value, url }] }' → { added: 2 }

GET
/cookiesdocument.documentElement.outerHTMLを返す — レンダリング済み、生のソースではなし。
POST
/cookiesdocument.body.innerTextを返す — 人間が読むテキスト。
DELETE
/cookiesPNG / JPEG / base64 — fullPage対応、JPEG品質0〜100。
GET
/historyPDFにレンダリング — A4/Letter、横向き、マージン、printBackgroundに対応。
DELETE
/historyCookieを一覧表示。URLでフィルタリング可能。

イントロスペクション

6 個のエンドポイント

curl /devtools-url?browser_id=main → { webSocketDebuggerUrl, devtoolsHttpUrl, devtoolsFrontendUrl }

GET
/metadataCookieを追加 — name、value、domain、path、httpOnly、secure、sameSiteを指定。
GET
/tabsインスタンスのすべてのCookieをクリア。
POST
/tab/closeインスタンスの完全なメタデータ — セッション、ビューポート、DevTools URL、タブ一覧。
GET
/devtools-urlid、url、title、isActiveを含む開いているタブの一覧。
GET
/consoleIDでタブを閉じる — 指定がなければアクティブなタブを閉じます。
GET
/networkCDP WebSocket + DevTools HTTP + フロントエンドUIのURLを返す。

ライフサイクル

5 個のエンドポイント

curl /start?browser_id=main&stealth=true → { browser_id, webSocketDebuggerUrl, stealth: true }

GET
/start最新500件のコンソールエントリ — log、error、warn、info。
GET
/stop最新500件のネットワークエントリ — メソッド、URL、ステータス、リソースタイプ。
GET
/restartドメインと時間フィルター付きのページング可能な永続ブラウジング履歴。
GET
/shutdownフィルターに一致する履歴エントリを削除。
GET
/api/v1/browser/healthliveness と readiness のチェック——コンテナ URL ではなく、中央 API(api.hoody.com)から提供されます。

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つの機能です。

Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id

フィンガープリントスプーフィング

/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から始めましょう。

ドキュメントを読む