Steel Browser 深度解析:为 AI 智能体构建的企业级云端浏览器 API
基于 Docker 的云端浏览器沙盒,支持 Puppeteer/Playwright/Selenium,会话持久化、反检测、代理轮询内置。
引言:从用户端到服务器端
前两篇文章介绍的 Nanobrowser 和 Browy 都是用户端工具——运行在开发者的个人桌面浏览器中。它们利用了用户已有的登录态、Cookie 和家庭 IP,天然避开了 CAPTCHA 和 WAF 检测。
但这类工具有一个天花板:无法规模化。
当你需要同时处理 50 个采集任务、管理 1000 个独立会话、或是在 CI/CD 管道中运行自动化测试时,基于浏览器扩展的方案就不够用了。你需要的是基础设施级别的浏览器管理。
Steel Browser 正是为此而生——一个开源的、可自托管的云端浏览器 API,将 Chrome 实例的管理抽象化为 REST API 调用。
架构概览
Steel 的核心是一个基于 Fastify 的 Node.js 服务,封装了 Puppeteer 的 Chrome 控制能力,并通过 REST API 暴露出来。
┌─────────────────────────────────────────┐
│ Steel Browser Server │
│ │
│ ┌─────────┐ ┌──────────┐ ┌────────┐ │
│ │ Sessions │ │ CDP │ │ Quick │ │
│ │ Manager │ │ Proxy │ │ Actions│ │
│ └────┬────┘ └────┬─────┘ └───┬────┘ │
│ │ │ │ │
│ ┌────▼────────────▼────────────▼────┐ │
│ │ Chrome Instance Pool │ │
│ │ (Puppeteer + CDP + Stealth) │ │
│ └────────────────┬──────────────────┘ │
│ │ │
│ ┌────────────────▼──────────────────┐ │
│ │ Built-in: 代理链 / 扩展 / 录制 │ │
│ └───────────────────────────────────┘ │
└──────────────────┬──────────────────────┘
│
REST API / WebSocket
│
┌──────────────┴──────────────┐
│ Puppeteer Playwright │
│ Selenium 自定义客户端 │
└─────────────────────────────┘核心能力拆解
| 能力 | 技术实现 | 业务价值 |
|---|---|---|
| 会话管理 | 隔离的浏览器配置文件,跨请求保留 Cookie/localStorage/IndexedDB | 智能体可登录一次后数天恢复操作 |
| 双协议兼容 | 同时暴露 CDP 端点和 Selenium WebDriver 接口 | 现有 Puppeteer/Playwright/Selenium 代码可直接接入 |
| 快速操作 API | /scrape /screenshot /pdf 等高级端点 | 减少启动浏览器的机械开销 |
| 反检测 | 隐身配置 + 代理轮询 + CAPTCHA 求解 | 提高自动化在 WAF 下的存活率 |
| 扩展支持 | 加载自定义 Chrome 扩展 | 可注入录制器、分析器等辅助工具 |
部署方式
Docker 快速启动(推荐)
docker run -p 3000:3000 -p 9223:9223 ghcr.io/steel-dev/steel-browser启动后访问 http://localhost:3000 查看 API,http://localhost:3000/ui 查看调试界面,端口 9223 用于 Chrome DevTools 远程调试。
一键云部署
| 平台 | 方式 |
|---|---|
| Railway | 一键部署按钮 |
| Render | 一键部署按钮 |
| 自托管 | Docker Compose |
自定义 Chrome 路径
export CHROME_EXECUTABLE_PATH=/path/to/your/chrome
docker compose upAPI 使用详解
Steel 提供两种交互方式:会话模式和快速操作模式。
会话模式(Session Mode)
适用于有状态的长时间运行智能体。需要先创建会话,然后在同一会话中执行多次操作。
创建会话:
curl -X POST http://localhost:3000/sessions \
-H "Content-Type: application/json" \
-d '{
"stealth": true,
"proxy": {
"server": "http://proxy.16yun.cn:8888",
"username": "user",
"password": "pass"
}
}'在会话中导航:
curl -X POST http://localhost:3000/sessions/<session-id>/cdp \
-H "Content-Type: application/json" \
-d '{
"method": "Page.navigate",
"params": { "url": "https://example.16yun.cn" }
}'获取页面内容:
curl http://localhost:3000/sessions/<session-id>/scrape关闭会话:
curl -X DELETE http://localhost:3000/sessions/<session-id>快速操作模式(Quick Actions)
适用于无状态的单次数据提取,无需管理会话生命周期。
抓取页面内容:
curl http://localhost:3000/scrape \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.16yun.cn",
"stealth": true
}'截取全页截图:
curl http://localhost:3000/screenshot \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.16yun.cn",
"fullPage": true
}' --output page.png生成 PDF:
curl http://localhost:3000/pdf \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.16yun.cn"
}' --output page.pdfSDK 方式
Steel 提供了 Node.js 和 Python 的官方 SDK:
# Node.js
npm install steel-sdk
# Python
pip install steel-sdkfrom steel_sdk import Steel
client = Steel(base_url="http://localhost:3000")
session = client.sessions.create(stealth=True, proxy="http://user:pass@proxy.16yun.cn:8888")
page = session.navigate("https://example.16yun.cn")
content = page.scrape()
session.close()反检测与代理集成
Steel 最大的工程价值之一是其内置的反检测能力。
代理轮询配置
Steel 支持多层级代理链配置:
curl -X POST http://localhost:3000/sessions \
-H "Content-Type: application/json" \
-d '{
"stealth": true,
"proxy": {
"server": "http://proxy.16yun.cn:8888",
"username": "user",
"password": "pass"
}
}'| 代理类型 | 推荐产品 | 适用场景 |
|---|---|---|
| 隧道代理(自动轮换) | 爬虫代理 | 大规模匿名采集,IP 自动管理 |
| API 代理(精细控制) | API 代理 | 每次请求切换 IP,精细提取策略 |
| 独享代理(固定出口) | 独享代理 | 长期登录态任务,稳定身份 |
隐身配置
Steel 内置了多层反检测机制:
- 隐身插件(Stealth Plugin):覆盖 WebDriver 属性、navigator 特征、Chrome 自动化痕迹
- 指纹管理:修改浏览器指纹参数,降低被识别概率
- 扩展注入:可加载自定义隐身扩展增强能力
错误码与排错
在使用代理时,常见的错误码处理:
| 错误码 | 含义 | 建议操作 |
|---|---|---|
| 407 | 代理认证失败 | 检查用户名密码配置 |
| 429 | 请求频率超限 | 降低并发数,增加间隔 |
| 403 | IP 白名单错误 | 检查 IP 白名单配置(API 代理场景) |
| 504 | 目标超时 | 重试 2-3 次,跳过持续失败的任务 |
会话持久化的工程价值
Steel 最有价值的功能之一是会话持久化。
在 AI 浏览器自动化中,登录是最麻烦的环节之一——需要处理 CAPTCHA、多因素认证、复杂的表单提交。如果每次任务都需要重新登录,成功率会显著下降。
Steel 的会话持久化意味着:
第一天:智能体登录目标网站(手动或自动),通过 CAPTCHA
↓ Cookie + localStorage + IndexedDB 被持久化到隔离配置文件
第三天:智能体恢复同一会话
↓ 无需重新登录,上次的认证状态仍然有效
第七天:同一配置继续使用...这在数据采集需要高频次访问同一站点、或管理多个登录账号的场景下尤其有用。
规模化部署的挑战
Steel 虽然在架构上贴近生产部署,但在规模化运营中仍然面临一些工程挑战(截至 2026 年中旬):
| Issue | 描述 | 状态 |
|---|---|---|
| 指纹生成一致性 | 自托管 API 在生成一致指纹时偶发失败 | 社区讨论中 |
| Chrome 版本适配 | 部分指纹生成器缺少特定 Chrome 版本的桌面样本 | 持续跟进上游 |
| iOS Safari iframe 兼容 | 嵌入式 iframe 在 iOS Safari 上的键盘输入存在问题 | 已记录 |
| Akamai 3.0 绕过 | 社区高度关注能否可靠绕过 Akamai 3.0 反爬系统 | 讨论中 |
这些问题反映了构建企业级浏览器基础设施的极端复杂性——尤其是面对 Akamai、Datadome 等深度浏览器指纹检测系统时,纯粹依赖 JavaScript 垫片的隐身方案存在天花板。
Steel 与其他方案的对比
| 维度 | Steel | Nanobrowser | Browy | agent-browser |
|---|---|---|---|---|
| 部署方式 | Docker 容器 / 云服务 | Chrome 扩展 | Chrome 扩展 + 本地宿主 | CLI + 守护进程 |
| 执行环境 | 云端无头 | 桌面有头 | 桌面有头 | 终端无头/有头 |
| 并发能力 | 高(多会话多实例) | 低(单浏览器) | 低(单标签页) | 中(单实例但快速) |
| 状态持久化 | 隔离配置文件跨请求 | 浏览器原生 Cookie | 沙盒文件系统 | 守护进程跨命令状态 |
| 反检测 | 内置 + 代理轮询 | 继承用户浏览器 | 继承用户浏览器 | 取决于底层引擎 |
| 协议兼容 | Puppeteer/Playwright/Selenium | 仅扩展 API | CDP + 自定义 | CDP + CLI |
| 适合团队 | 数据团队 / QA 团队 | 个人 | 个人 | 个人 / 小团队 |
总结
Steel Browser 代表了一条与 Nanobrowser、Browy 截然不同的技术路线:它不依赖用户的桌面浏览器,而是将浏览器管理抽象为可编程的 REST API。这种基础设施化的设计使其成为大规模并发 AI 智能体的理想后端。
但它也要面对云端自动化的原生问题——数据中心 IP 的可疑性、CAPTCHA 的处理成本、以及深层次反检测系统的对抗。对于需要长期、大批量采集的场景,Steel + 16YUN 爬虫代理 + 会话持久化 的组合是目前可落地的最强方案之一。
下一篇文章将介绍 agent-browser——Vercel Labs 开发的基于 Rust 的浏览器自动化 CLI,它对 Token 效率的优化达到了令人惊叹的程度。
需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。