コンテンツにスキップ
ホーム / キット / ブラウザー
BrowserKitサービス

Chromium URLで

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

PROJECT-CONTAINER-browser-1.SERVER.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
API

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

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

browser-api.sh

# 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-api.js

// 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_api.py

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

{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はフルボディを受け付けます。

インタラクション

[count, plural, one [# endpoint] other [# endpoints]]'

curl -X POST /eval -d '["script":"document.title"]' → "Example"

POST
/browseJSONボディでナビゲート — waitUntil、タイムアウト、リファラー、ヘッダーを指定可能。
GET
/browse?url=シェルからcurlで使いやすい省略ナビゲーション。
POST
/evalページコンテキストでJavaScript(プレーンまたはbase64)を実行し、結果を返す。
GET
/eval?script=document.titleのようなワンショット読み取り用のインラインスクリプト評価。
GET
/htmldocument.documentElement.outerHTMLを返す — レンダリング済み、生のソースではなし。
GET
/textdocument.body.innerTextを返す — 人間が読むテキスト。
GET
/screenshotPNG / JPEG / base64 — fullPage対応、JPEG品質0〜100。
GET
/pdfPDFにレンダリング — A4/Letter、横向き、マージン、printBackgroundに対応。

セッション状態

[count, plural, one [# endpoint] other [# endpoints]]'

curl -X POST /cookies -d '[[name,value,domain,...]]' → [ added: 4 ]

GET
/cookiesCookieを一覧表示。URLでフィルタリング可能。
POST
/cookiesCookieを追加 — name、value、domain、path、httpOnly、secure、sameSiteを指定。
DELETE
/cookiesインスタンスのすべてのCookieをクリア。
GET
/metadataインスタンスの完全なメタデータ — セッション、ビューポート、DevTools URL、タブ一覧。
GET
/tabsid、url、title、isActiveを含む開いているタブの一覧。
POST
/tab/closeIDでタブを閉じる — 指定がなければアクティブなタブを閉じます。

イントロスペクション

[count, plural, one [# endpoint] other [# endpoints]]'

curl /devtools-url?browser_id=main → [ ws, http, frontend ]

GET
/devtools-urlCDP WebSocket + DevTools HTTP + フロントエンドUIのURLを返す。
GET
/console最新500件のコンソールエントリ — log、error、warn、info。
GET
/network最新500件のネットワークエントリ — メソッド、URL、ステータス、リソースタイプ。
GET
/historyドメインと時間フィルター付きのページング可能な永続ブラウジング履歴。
DELETE
/historyフィルターに一致する履歴エントリを削除。

ライフサイクル

[count, plural, one [# endpoint] other [# endpoints]]'

curl /start?browser_id=main&stealth=true → [ ws, stealth: true ]

GET
/startbrowser_id、フィンガープリント、ステルス、プロキシ、ビューポートを指定してインスタンスを作成または再開。
GET
/stopインスタンスを一時停止 — 状態は維持されます。/restartで再開できます。
GET
/restart停止して、オプションで更新した設定で再起動。
GET
/shutdownインスタンスを終了してスロットを解放。?force=trueでスタックしたインスタンスを強制終了。

さらに、すべてのHoody KitサービスにはGET /healthとGET /metricsがプラットフォームから提供されます。

ホーム / キット / ブラウザー / 機能
機能

ステルス、フィンガープリント、CDP — セットアップコストなし

Browserはchromium上の薄いレイヤーです — インストール、パッチ適用、管理が必要なものはすべてクエリパラメーターで指定できます。実際に本番環境で重要な6つの機能です。

Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent 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から始めましょう。

ドキュメントを読む