跳转到内容
Chromium 即 URL
指纹伪装
标签页控制
截图 API
JavaScript 执行
网络拦截
Chrome DevTools Protocol
Puppeteer 兼容
Chromium 即 URL
指纹伪装
标签页控制
截图 API
JavaScript 执行
网络拦截
Chrome DevTools Protocol
Puppeteer 兼容
Chromium 即 URL
指纹伪装
标签页控制
截图 API
JavaScript 执行
网络拦截
Chrome DevTools Protocol
Puppeteer 兼容
Chromium 即 URL
指纹伪装
标签页控制
截图 API
JavaScript 执行
网络拦截
Chrome DevTools Protocol
Puppeteer 兼容
Browser套件服务

Chromium 通过 URL

无头或可见的 Chromium,通过简洁 HTTP API 全面控制。默认开启隐身模式,/start 返回 CDP WebSocket——将 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

三类接口,一个 URL

通过 HTTP 驱动、观察和检视真实浏览器

每个 Browser 实例都暴露 Puppeteer 和 Playwright 所依赖的相同原语——导航、DOM 执行、截图、DevTools 协议——但以简洁的 HTTP 接口呈现。选择下方标签页,查看底层运行的具体接口。

01 / 05

启动实例,指向目标 URL

GET /start 启动带指纹的隐身 Chromium;GET /browse?url=… 加载页面。一次 HTTP 往返,无需安装驱动,无需维护 Docker 镜像。

curl /start?stealth=true → ready
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——支持整页或视口截图;GET /pdf 渲染为 A4/Letter,支持横向与边距设置。二进制直接返回,无需处理无头 Chrome 标志。

GET /screenshot?fullPage=true → PNG binary
04 / 05

获取 CDP URL,接入任意工具

GET /devtools-url 返回三个 URL:CDP WebSocket(供 Puppeteer / Playwright / 任意 CDP 客户端使用)、DevTools HTTP API 和 DevTools 前端界面。在浏览器标签页打开前端 URL,即可实时查看无头实例的状态。

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

截图 → 决策 → 点击,循环执行

每个 Computer-Use 模型都期望的结构:截图、DOM 快照、在 (x, y) 点击的方式。Browser 通过简单 HTTP 接口暴露这些原语——可直接对接 Claude Computer Use、OpenAI Operator 或自定义智能体。

loop: screenshot → eval('click(x,y)')
之前· 传统无头方式

docker run chromium + fonts + fingerprint patches

之后· Hoody Browser

curl /start?stealth=true → ready

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 层,开放了本地无头浏览器无法覆盖的集成点。以下是最常见的六种部署形态。

{01}

数据管道

将渲染后的 HTML 和 JSON 注入数据仓库。定时调用 /eval,将结果导入 Snowflake、BigQuery 或 Postgres。无需在每台工作节点安装 Chromium,无需担心集群版本漂移。

{02}

智能体框架

直接接入 Claude Computer Use、OpenAI Operator 或 LangChain 浏览器工具。截图加执行正是这些框架期望的形态——Browser 是适配任何智能体运行时的 HTTP 直接插件。

{03}

已认证工作流

驱动已登录的仪表盘——SaaS 管理面板、银行门户、内部工具。POST /cookies 持久化会话,后续调用无需每次重新认证。

{04}

Review App

针对每个 PR 的浏览器预览。CI 向暂存构建启动一个 Browser 实例,在 PR 评论中返回 /devtools-url 前端链接,审查者一键即可实时查看应用。

{05}

定时监控

通过定时任务触发 /screenshot 和 /network 采集,接入正常运行时间、SLO 和性能仪表盘。为每个探针环形缓冲最近 500 条控制台和网络记录——在用户发现问题前提前捕获回归。

{06}

合规快照

对第三方页面进行加盖时间戳、锁定指纹的截图,用于法律、审计或取证场景。锁定 Chromium 渠道、视口和地理位置——数月后仍可精确复现。

API

23 个操作,4 个接口组

每项 Browser 能力都是一次简单 HTTP 调用。同一路径的不同 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
/html通过 JSON 请求体导航——支持 waitUntil、timeout、referer、headers。
GET
/text面向命令行的简洁导航方式。
GET
/screenshot在页面上下文中执行 JavaScript(纯文本或 base64),返回结果。
GET
/pdf单次读取的内联脚本执行,如 document.title。

会话状态

5 个端点

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

GET
/cookies返回 document.documentElement.outerHTML——渲染后的结果,非原始 HTML。
POST
/cookies返回 document.body.innerText——用户实际可见的文本。
DELETE
/cookiesPNG / JPEG / base64——支持整页截图,JPEG 质量 0-100。
GET
/history渲染为 PDF——支持 A4/Letter、横向、边距、打印背景。
DELETE
/history列出 Cookie,可按 URL 过滤。

自省

6 个端点

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

GET
/metadata添加 Cookie——name、value、domain、path、httpOnly、secure、sameSite。
GET
/tabs清除实例的所有 Cookie。
POST
/tab/close完整实例元数据——会话、视口、DevTools URL、标签页列表。
GET
/devtools-url列出已打开的标签页,含 id、url、title、isActive。
GET
/console按 id 关闭标签页——未指定时关闭当前激活的标签页。
GET
/network返回 CDP WebSocket + DevTools HTTP + 前端界面 URL。

生命周期

5 个端点

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

GET
/start最近 500 条控制台记录——log、error、warn、info。
GET
/stop最近 500 条网络记录——method、URL、status、resourceType。
GET
/restart分页持久化浏览历史,支持域名与时间过滤。
GET
/shutdown删除符合过滤条件的历史记录。
GET
/api/v1/browser/health存活性与就绪性检查——由中心 API(api.hoody.com)提供,而非容器 URL。

24 个端点,分布在四个功能区。其中 23 个使用所示的短路径运行在你的 browser 容器 URL 上;健康检查是唯一的例外,由中心 API 在 api.hoody.com/api/v1/browser/health 提供。方法遵循文档:browse 和 eval 接受 GET 和 POST;cookies 增加 GET、POST 和 DELETE。

能力

隐身模式、指纹伪装与 CDP——零配置负担

Browser 是 Chromium 之上的薄层——所有需要安装、打补丁和维护的内容都只是一个查询参数。六项关键能力,真正面向生产环境。

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 自动跟随配置文件。

隐身模式

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 条网络记录,并提供可查询和删除的持久化浏览历史接口。无需额外接入外部日志层。

为你的技术栈添加真实浏览器

Browser 是随每个 Hoody 容器预装的套件服务之一。无需安装驱动,无需 Puppeteer 脚手架,无需手动修补指纹。从一个 URL 开始。

阅读文档