推荐方案
⚡ Lightpanda
官方定位:AI agents / automation 的 headless browser
核心特点:
- 专为 AI 代理和自动化场景设计
- 支持 JavaScript、Web APIs
- 通过 CDP 兼容 Puppeteer、Playwright、chromedp
- 官方 benchmark:100 pages peak memory 123MB(Headless Chrome 2GB)
- Docker 镜像支持 amd64 和 arm64
Docker 部署:
docker run -d --name lightpanda \
-p 9222:9222 \
lightpanda/browser:nightly
CDP 连接:
ws://localhost:9222
# Puppeteer 示例
const browser = await puppeteer.connect({
browserURL: 'http://localhost:9222'
});
优缺点:
| 优点 | 缺点 |
|---|
| 极致内存优化 | Beta 阶段,生产环境需评估 |
| 多架构支持 | 非 Chromium/WebKit,内核自主研发 |
| CDP 多客户端兼容 | CSS/rendering/截图兼容性较弱 |
| AI 场景针对性优化 | 无面向人类的图形渲染能力 |
适用场景:极致内存优先的纯自动化场景,如大规模网页抓取、代理自动化。
🏔️ zenika/alpine-chrome
核心特点:
- Alpine Linux + Chromium,轻量级基础镜像
- 比 browserless 少 Node server/queue API 层
- 仍是完整 Chromium,100% CDP 兼容
- 镜像体积小 (~150MB base)
Docker 部署:
docker run -d --name alpine-chrome \
-p 9222:9222 \
zenika/alpine-chrome \
--headless \
--remote-debugging-address=0.0.0.0 \
--remote-debugging-port=9222 \
--no-sandbox \
--disable-gpu
CDP 连接:ws://localhost:9222
优缺点:
| 优点 | 缺点 |
|---|
| 完整 Chromium,兼容性最佳 | 内存占用仍高于 Lightpanda |
| 镜像体积小 | 需要手动处理 --no-sandbox |
| 简单直接,无多余层 | 无内置健康检查/重启 |
适用场景:简单、直接的 CDP 服务,无需额外 queue 层。
🧩 chromedp/headless-shell
核心特点:
- Chrome DevTools Protocol 官方维护的 headless shell
- 是 Chrome 的精简版本,移除了 UI 部分
- 可被所有 CDP 客户端直接驱动
- Docker 镜像由 chromedp 官方维护
Docker 部署:
docker run -d --name headless-shell \
-p 9222:9222 \
chromedp/headless-shell
CDP 连接:
ws://localhost:9222
# chromedp 示例
ctx, cancel := chromedp.NewContext(ctx)
chromedp.Embed(
websocket.WithBlob(ws.DefaultDialer, "ws://localhost:9222"),
)
优缺点:
| 优点 | 缺点 |
|---|
| 官方维护,CDP 兼容性强 | 内存占用中等 |
| Docker 部署简便 | 仍是 Chromium 内核,体积较大 |
| 适合 Go 生态 (chromedp) | arm64 支持需确认 |
适用场景:需要 Chromium 兼容性、Docker 部署、CDP 协议驱动的场景。
🔧 原生 Chrome/Chromium headless
核心特点:
- Chrome 官方支持的 headless 模式
--remote-debugging-port- 运维完全可控
- 可自建最小 Debian/Ubuntu 镜像
命令行启动:
# Chrome (需已安装 Chrome)
google-chrome --headless --remote-debugging-port=9222
# Chromium (Ubuntu/Debian)
chromium --headless --remote-debugging-port=9222
# 完整命令示例
chromium --headless \
--remote-debugging-address=0.0.0.0 \
--remote-debugging-port=9222 \
--no-sandbox \
--disable-gpu \
--disable-dev-shm-usage \
--user-data-dir=/tmp/chrome-data
自建 Docker 镜像:
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y chromium
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
#!/bin/bash
chromium --headless \
--remote-debugging-address=0.0.0.0 \
--remote-debugging-port=9222 \
--no-sandbox \
--disable-gpu \
--disable-dev-shm-usage
运维需自行处理:
- 崩溃重启 (supervisor/systemd)
- 健康检查 (curl /health 或 /json)
- 用户数据目录清理
- sandbox/shm 配置 (Docker 中需 --privileged 或 --cap-add)
适用场景:运维可控、需深度定制的场景。
不优先推荐
❌ Selenium standalone-chrome
| 方面 | 说明 |
|---|
| 主接口 | WebDriver,不是直接 CDP |
| 内存 | 较重,包含 Selenium server 层 |
| 适用 | 已有 Selenium 生态的场景 |
# Selenium standalone 启动
java -jar selenium-server-standalone.jar \
--browser browser=chrome \
-port 4444
❌ Playwright server
| 方面 | 说明 |
|---|
| 主接口 | Playwright CLI/API,不是最直接的 CDP |
| 内存 | 需要 Playwright 客户端 + 浏览器实例 |
| 适用 | Playwright 生态内使用 |
# Playwright CLI 启动
npx playwright launch-server --port 9222
# 或使用内置 CDP
npx playwright codegen --target javascript
❌ Camofox
| 方面 | 说明 |
|---|
| 主接口 | REST API (CAMOFOX_URL) |
| 协议 | 不是 CDP,是 HTTP REST |
| 适用 | 非 CDP 场景,Hermes agent 支持 |
# Camofox 启动 (REST 后端)
camofox --host 0.0.0.0 --port 8080
# agent-browser 使用方式
export CAMOFOX_URL=http://localhost:8080
注意:若要求 agent-browser --cdp,Camofox 不匹配。