开源项目为AI agents和应用提供浏览器控制API,降低构建自动化应用的开发门槛。提供类似Puppeteer但专为Agent优化的接口。
开源浏览器 API,用于构建与网络交互的 AI 应用和智能体。最佳的构建实时网络智能体和浏览器自动化工具的方式。
Steel.dev 是一个开源浏览器 API,可以轻松构建与网络交互的 AI 应用和智能体。与从零开始构建自动化基础设施不同,你可以专注于 AI 应用本身,而 Steel 负责处理复杂性。
在底层,它管理会话、页面和浏览器进程,使你能够以编程方式执行复杂的浏览任务,不需要任何额外的麻烦:
完整的浏览器控制:使用 Puppeteer 和 CDP 完全控制 Chrome 实例 —— 允许你使用 Puppeteer、Playwright 或 Selenium 连接。
会话管理:跨请求维护浏览器状态、cookies 和本地存储
代理支持:内置代理链管理,用于 IP 轮换
扩展支持:加载自定义 Chrome 扩展以获得增强功能
调试工具:内置请求日志和 UI 用于查看/调试会话
反检测:包括隐身插件和指纹管理
资源管理:自动清理和浏览器生命周期管理
浏览器工具:暴露 API 以快速将页面转换为 markdown、可读性提取、屏幕截图或 PDF。
关于详细的 API 文档和示例,请查看我们的 API 参考或直接在 http://0.0.0.0:3000/documentation 浏览 Swagger UI。
Steel 处于公开 beta 阶段,每天都在不断演进。你的建议、想法和报告的 bug 对我们帮助很大。不要犹豫,加入我们在 Discord 的讨论或提出 GitHub issue。我们阅读一切内容,回复大多数问题,爱你们。
如果你热爱开源、AI 和开发者工具,我们正在招聘!
记得给我们一个星标 ⭐
开始使用 Steel 的最简方式是创建 Steel Cloud 账户。否则,你可以将 Steel 浏览器实例部署到云提供商或在本地运行。
如果你想部署到云提供商,我们已经为你准备好了。
在本地部署/运行 Steel 浏览器实例的最简方式是运行预构建的 Docker 镜像:
# Pull and run the Docker image
docker run -p 3000:3000 -p 9223:9223 ghcr.io/steel-dev/steel-browser
这将在端口 3000(http://localhost:3000)启动 Steel 浏览器服务器,UI 在 http://localhost:3000/ui。端口 9223 用于控制台调试器。
你现在可以创建会话、抓取页面、截屏等。跳转到使用部分了解一些快速示例,看看如何做到这一点。
或者,你可以用 docker compose 分别运行 API 和 UI:
docker compose up
对于 Mac Silicon 用户,你需要向 Docker compose 命令传递此 env 标志以在正确的平台上运行镜像:
DOCKER_DEFAULT_PLATFORM=linux/arm64 docker compose up
在本地开发时,你需要运行 docker-compose.dev.yml 文件而不是默认的 docker-compose.yml 文件,这样你的本地更改才会被反映出来。这样做会从 api 和 ui 目录构建 Docker 镜像,并在端口 3000 和 5173 分别运行服务器和 UI。
docker compose -f docker-compose.dev.yml up
你还需要使用 --build 运行它,以确保每次做更改时都重新构建 Docker 镜像:
docker compose -f docker-compose.dev.yml up --build
如果你在自定义主机上运行,创建 .env 文件(见 docs/DEVELOPMENT_SETUP.md 获取变量)或修改 docker-compose.dev.yml 使用的环境变量以使用你的主机。
或者,如果你已安装 Node.js 和 Chrome,可以直接运行服务器和 UI:
npm install
npm run dev
这也会在端口 3000 启动 Steel 服务器,在端口 5173 启动 UI。
确保你有 Chrome 可执行文件已安装在以下路径之一:
Linux: /usr/bin/google-chrome
MacOS: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Windows: C:\Program Files\Google\Chrome\Application\chrome.exe 或 C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
如果你有自定义 Chrome 可执行文件或不同的路径,可以设置 CHROME_EXECUTABLE_PATH 环境变量为 Chrome 可执行文件的路径:
export CHROME_EXECUTABLE_PATH=/path/to/your/chrome
npm run dev
关于此路径的检查位置的更多细节,请查看 api/src/utils/browser.ts。
如果你在寻找如何使用 Steel 的快速示例,请查看 Cookbook。
或者,你也可以尝试 REPL 包 cd repl 和 npm run start
有两种主要方式与 Steel 浏览器 API 交互:
在这些示例中,我们假设你的自定义 Steel API 端点是 http://localhost:3000。
完整的 REST OpenAPI 文档可以在我们的网站和你的本地 Steel 实例的 http://localhost:3000/documentation 找到。
如果你更喜欢使用我们的 Python 和 Node SDK,可以为 Node 或 Python 安装 steel-sdk 包。
这些 SDK 建立在 REST API 之上,提供了一种更便捷的与 Steel 浏览器 API 交互的方式。它们是完全类型化的,与 Steel Cloud 和自托管 Steel 实例兼容(在 Node 上使用 baseURL 选项,Python 上使用 base_url 更改)。
关于安装和使用 SDK 的更多细节,请参见 Node SDK 参考和 Python SDK 参考。
/sessions 端点让你用自定义选项或扩展(例如自定义代理)重新启动浏览器,也可以重置浏览器状态。非常适合需要细粒度控制的复杂、有状态的工作流。
一旦你有了会话,可以使用会话 ID 或根 URL 与浏览器交互。为此,你需要使用 Puppeteer 或 Playwright。你可以在下面的文档中找到如何使用 Puppeteer 和 Playwright 与 Steel 的一些示例:
Puppeteer 集成
Playwright with Python
import Steel from 'steel-sdk';
const client = new Steel({
baseURL: "http://localhost:3000", // Custom API Base URL override
});
(async () => {
try {
// Create a new browser session with current API fields
const session = await client.sessions.create({
blockAds: true,
proxyUrl: "user:pass@host:port", // optional
dimensions: { width: 1280, height: 800 }, // optional
});
console.log("Created session with ID:", session.id);
} catch (error) {
console.error("Error creating session:", error);
}
})();
import os
from steel import Steel
client = Steel(
base_url="http://localhost:3000", # Custom API Base URL override
)
try:
# Create a new browser session with custom options
session = client.sessions.create(
block_ads=True,
proxy_url="user:pass@host:port", # optional
dimensions={"width": 1280, "height": 800}, # optional
)
print("Created session with ID:", session.id)
except Exception as e:
print("Error creating session:", e)
# Launch a new browser session
curl -X POST http://localhost:3000/v1/sessions \
-H "Content-Type: application/json" \
-d '{
"proxyUrl": "user:pass@host:port",
"blockAds": true,
"dimensions": { "width": 1280, "height": 800 }
}'
注意:这个集成不支持基于 CDP 的浏览器会话 API 的所有功能。
对于已有 Selenium 工作流的团队,Steel 浏览器提供了一个即插即用的替代品,添加增强功能同时保持兼容性。你可以简单地使用 isSelenium 选项来创建 Selenium 会话:
// Using the Node SDK
const session = await client.sessions.create({ isSelenium: true });
# Using the Python SDK
session = client.sessions.create(is_selenium=True)
# Launch a Selenium session
curl -X POST http://localhost:3000/v1/sessions \
-H "Content-Type: application/json" \
-d '{
"isSelenium": true
}'
Selenium API 与 Selenium 的 WebDriver 协议完全兼容,所以你可以使用任何现有的 Selenium 客户端连接到 Steel 浏览器。关于如何使用 Selenium 与 Steel 的更多细节,请参考 Selenium 文档。
/scrape、/screenshot 和 /pdf 端点让你快速从任何网页中提取干净、格式良好的数据,使用正在运行的 Steel 服务器。非常适合简单的、只读的、按需的工作:
提取网页的 HTML 内容。
# Example using the Actions API
curl -X POST http://0.0.0.0:3000/v1/scrape \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"delay": 1000
}'
获取网页的屏幕截图。
# Example using the Actions API
curl -X POST http://0.0.0.0:3000/v1/screenshot \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"fullPage": true
}' --output screenshot.png
下载网页的 PDF。
# Example using the Actions API
curl -X POST http://0.0.0.0:3000/v1/pdf \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com"
}' --output output.pdf
Steel 浏览器是开源项目,我们欢迎贡献!
有问题/想法/反馈?来 Discord 上与我们聊天
发现 bug?在 GitHub 上提交 issue
用 ❤️ 由 Steel 团队开发。