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://proj-dev-browser-1.hoody.com"
ID="main"
# 1. Spawn a stealth Chromium
curl -s "$URL/start?browser_id=$ID&stealth=true"
# 2. Navigate
curl -s "$URL/browse?browser_id=$ID&url=https://hoody.com"
# 3. Extract structured data
curl -s -X POST "$URL/eval?browser_id=$ID" \
-H 'Content-Type: application/json' \
-d '["script":"document.title"]'
# > "Example Domain"
# 4. Release the slot
curl -s "$URL/shutdown?browser_id=$ID"
// Full Browser flow — start, navigate, extract, shutdown
const BASE = 'https://proj-dev-browser-1.hoody.com';
const id = 'main';
// 1. Spawn a stealth Chromium
const start = await fetch(`$[BASE]/start?browser_id=$[id]&stealth=true`);
const [ webSocketDebuggerUrl ] = await start.json();
// 2. Navigate
await fetch(`$[BASE]/browse?browser_id=$[id]&url=https://hoody.com`);
// 3. Extract structured data
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. Release the slot
await fetch(`$[BASE]/shutdown?browser_id=$[id]`);
# Full Browser flow — start, navigate, extract, shutdown
import requests
BASE = 'https://proj-dev-browser-1.hoody.com'
id = 'main'
# 1. Spawn a stealth Chromium
start = requests.get(f'[BASE]/start', params=['browser_id': id, 'stealth': 'true'])
ws = start.json()['webSocketDebuggerUrl']
# 2. Navigate
requests.get(f'[BASE]/browse', params=['browser_id': id, 'url': 'https://hoody.com'])
# 3. Extract structured data
r = requests.post(f'[BASE]/eval',
params=['browser_id': id],
json=['script': 'document.title'])
title = r.json()
# => "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 接受完整请求体。
交互
[count, plural, one [# 个接口] other [# 个接口]]'curl -X POST /eval -d '["script":"document.title"]' → "Example"
会话状态
[count, plural, one [# 个接口] other [# 个接口]]'curl -X POST /cookies -d '[[name,value,domain,...]]' → [ added: 4 ]
自省
[count, plural, one [# 个接口] other [# 个接口]]'curl /devtools-url?browser_id=main → [ ws, http, frontend ]
生命周期
[count, plural, one [# 个接口] other [# 个接口]]'curl /start?browser_id=main&stealth=true → [ ws, stealth: true ]
每个 Hoody 套件服务还继承平台级 GET /health 和 GET /metrics 接口。
隐身模式、指纹伪装与 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 条网络记录,并提供可查询和删除的持久化浏览历史接口。无需额外接入外部日志层。