Chromium 通过 URL
无头或可见的 Chromium,通过简洁 HTTP API 全面控制。默认开启隐身模式,/start 返回 CDP WebSocket——将 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 协议——但以简洁的 HTTP 接口呈现。选择下方标签页,查看底层运行的具体接口。
启动实例,指向目标 URL
GET /start 启动带指纹的隐身 Chromium;GET /browse?url=… 加载页面。一次 HTTP 往返,无需安装驱动,无需维护 Docker 镜像。
在页面中执行 JS,返回结构化数据
POST /eval 在页面上下文中运行任意 JavaScript;GET /html 和 GET /text 返回渲染后的 DOM 与可见文本。无需选择器库,无需无头浏览器 SDK。
对当前页面截图或生成 PDF
GET /screenshot 返回 PNG、JPEG 或 base64——支持整页或视口截图;GET /pdf 渲染为 A4/Letter,支持横向与边距设置。二进制直接返回,无需处理无头 Chrome 标志。
获取 CDP URL,接入任意工具
GET /devtools-url 返回三个 URL:CDP WebSocket(供 Puppeteer / Playwright / 任意 CDP 客户端使用)、DevTools HTTP API 和 DevTools 前端界面。在浏览器标签页打开前端 URL,即可实时查看无头实例的状态。
截图 → 决策 → 点击,循环执行
每个 Computer-Use 模型都期望的结构:截图、DOM 快照、在 (x, y) 点击的方式。Browser 通过简单 HTTP 接口暴露这些原语——可直接对接 Claude Computer Use、OpenAI Operator 或自定义智能体。
docker run chromium + fonts + fingerprint patches
curl /start?stealth=true → ready
通过 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 层,开放了本地无头浏览器无法覆盖的集成点。以下是最常见的六种部署形态。
数据管道
将渲染后的 HTML 和 JSON 注入数据仓库。定时调用 /eval,将结果导入 Snowflake、BigQuery 或 Postgres。无需在每台工作节点安装 Chromium,无需担心集群版本漂移。
智能体框架
直接接入 Claude Computer Use、OpenAI Operator 或 LangChain 浏览器工具。截图加执行正是这些框架期望的形态——Browser 是适配任何智能体运行时的 HTTP 直接插件。
已认证工作流
驱动已登录的仪表盘——SaaS 管理面板、银行门户、内部工具。POST /cookies 持久化会话,后续调用无需每次重新认证。
Review App
针对每个 PR 的浏览器预览。CI 向暂存构建启动一个 Browser 实例,在 PR 评论中返回 /devtools-url 前端链接,审查者一键即可实时查看应用。
定时监控
通过定时任务触发 /screenshot 和 /network 采集,接入正常运行时间、SLO 和性能仪表盘。为每个探针环形缓冲最近 500 条控制台和网络记录——在用户发现问题前提前捕获回归。
合规快照
对第三方页面进行加盖时间戳、锁定指纹的截图,用于法律、审计或取证场景。锁定 Chromium 渠道、视口和地理位置——数月后仍可精确复现。
23 个操作,4 个接口组
每项 Browser 能力都是一次简单 HTTP 调用。同一路径的不同 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 }
24 个端点,分布在四个功能区。其中 23 个使用所示的短路径运行在你的 browser 容器 URL 上;健康检查是唯一的例外,由中心 API 在 api.hoody.com/api/v1/browser/health 提供。方法遵循文档:browse 和 eval 接受 GET 和 POST;cookies 增加 GET、POST 和 DELETE。
隐身模式、指纹伪装与 CDP——零配置负担
Browser 是 Chromium 之上的薄层——所有需要安装、打补丁和维护的内容都只是一个查询参数。六项关键能力,真正面向生产环境。
指纹伪装
在 /start 配置 UA、视口、时区、语言和地理位置——或指向 fingerprintId 加载预设 JSON。Canvas 和 WebGL 自动跟随配置文件。
隐身模式
Patchright 反检测默认对 Chromium 开启。并非对所有检测厂商都无懈可击——如需对抗强防护站点,建议配合验证码解决方案使用。
CDP 直通
GET /devtools-url 返回 WebSocket URL、DevTools HTTP API 和前端界面。现有 Puppeteer 或 Playwright 代码无需改写,直接连接即可。
代理与 DoH
支持 SOCKS5、SOCKS5h、HTTP、HTTPS 代理,含认证与白名单配置。默认通过 Cloudflare 开启 DNS over HTTPS;QUIC/HTTP3 可按实例选择性开启。
Chromium 渠道
精确指定任意 Chromium 构建版本——完整版本字符串、主版本号或渠道(stable / beta / dev / canary)。也可通过 browser=firefox 支持 Firefox。
调试环形缓冲区
每个实例保留最近 500 条控制台记录和 500 条网络记录,并提供可查询和删除的持久化浏览历史接口。无需额外接入外部日志层。