Lightpanda: 比Chrome快11倍的AI爬虫浏览器

2026年3月15日

中等难度,约20分钟,学会使用轻量级无头浏览器做AI数据采集,速度比Chrome快11倍,内存少9倍。

目标读者

  • 需要大规模网页爬虫的工程师
  • AI/LLM 数据采集开发者
  • 自动化测试工程师
  • 对高性能浏览器技术感兴趣的技术爱好者

核心依赖与环境

  • Linux x86_64 或 macOS aarch64
  • Windows 需要 WSL2
  • Docker(可选,推荐用于生产环境)
  • Node.js 18+(运行 Puppeteer/Playwright 脚本)

TIP

如果你用 Windows,直接在 WSL2 里安装 Lightpanda,然后在 Windows 主机上运行 Puppeteer。

完整项目结构

lightpanda-browser/
├── lightpanda              # 主程序二进制文件
├── LICENSE                # MIT 许可证
├── README.md              # 项目说明
├── CONTRIBUTING.md        # 贡献指南
├── CLA.md                 # 贡献者许可协议
├── docker/
│   └── Dockerfile         # Docker 构建文件
├── src/                   # Zig 源码(如果你想从源码编译)
└── docs/                  # 文档目录

手把手教程

步骤1:下载并安装 Lightpanda

我们可以从 nightly builds 直接下载二进制文件。

Linux 安装:

curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-x86_64-linux && \
chmod a+x ./lightpanda

macOS 安装:

curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-aarch64-macos && \
chmod a+x ./lightpanda

验证安装:

./lightpanda --version

WARNING

目前只有 Linux x86_64 和 macOS aarch64 的官方二进制。Windows 用户需要用 WSL2。

步骤2:使用 Docker 启动(推荐)

如果你不想直接下载二进制,可以用 Docker 更快上手:

docker run -d --name lightpanda -p 9222:9222 lightpanda/browser:nightly

这样就直接启动了 CDP 服务器,监听在 9222 端口。

验证容器运行:

docker ps | grep lightpanda

步骤3:启动 CDP 服务器

如果我们不用 Docker,需要手动启动 CDP 服务器:

./lightpanda serve --obey_robots --log_format pretty --log_level info --host 127.0.0.1 --port 9222

输出类似:

INFO  telemetry : telemetry status . . . . . . . . . . . . .  [+0ms]
      disabled = false

INFO  app : server running . . . . . . . . . . . . . . . .  [+0ms]
      address = 127.0.0.1:9222

TIP

--obey_robots 参数会让 Lightpanda 遵守 robots.txt,这是礼貌爬虫的基本素养。

步骤4:编写 Puppeteer 脚本

现在我们来写第一个爬虫脚本。假设你已经在项目目录安装了 puppeteer-core:

npm install puppeteer-core

创建一个 crawler.js 文件:

'use strict'

import puppeteer from 'puppeteer-core';

// 通过 WebSocket 连接到 Lightpanda 的 CDP 服务器
const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:9222",
});

// 创建浏览器上下文和页面
const context = await browser.createBrowserContext();
const page = await context.newPage();

// 访问目标页面
await page.goto('https://demo-browser.lightpanda.io/amiibo/', {waitUntil: "networkidle0"});

// 提取页面中所有链接
const links = await page.evaluate(() => {
  return Array.from(document.querySelectorAll('a')).map(row => {
    return row.getAttribute('href');
  });
});

console.log('抓取的链接:');
links.forEach(link => console.log(link));

// 统计页面加载时间
const metrics = await page.metrics();
console.log('\n页面指标:');
console.log('脚本执行时间:', metrics.ScriptDuration, 'ms');
console.log('DOM 节点数:', metrics.Nodes);

// 清理资源
await page.close();
await context.close();
await browser.disconnect();

运行脚本:

node crawler.js

TIP

如果你是用 Docker 启动的 Lightpanda,脚本里的 browserWSEndpoint 改成 ws://localhost:9222

步骤5:体验极速抓取

Lightpanda 官方数据显示:

  • 速度: 比 Chrome 快 11 倍
  • 内存: 比 Chrome 少 9 倍
  • 启动: 即时启动(无头 Chrome 启动要好几秒)

我们来跑一个简单对比测试。首先确保 Lightpanda 在运行:

./lightpanda serve --host 127.0.0.1 --port 9222

然后写一个批量抓取脚本:

'use strict'

import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:9222",
});

const context = await browser.createBrowserContext();
const page = await context.newPage();

// 批量抓取多个页面
const urls = [
  'https://demo-browser.lightpanda.io/amiibo/',
  'https://demo-browser.lightpanda.io/campfire-commerce/',
  'https://demo-browser.lightpanda.io/hacker-news-top-stories/',
];

const startTime = Date.now();

for (const url of urls) {
  console.log(`\n抓取: ${url}`);
  const pageStart = Date.now();

  await page.goto(url, {waitUntil: "networkidle0"});

  const title = await page.title();
  console.log(`标题: ${title}`);
  console.log(`耗时: ${Date.now() - pageStart}ms`);
}

console.log(`\n总耗时: ${Date.now() - startTime}ms`);

await browser.disconnect();

运行:

node batch-crawler.js

你会发现即使是批量抓取,Lightpanda 的响应也非常快。

步骤6:高级功能 - 页面截图

Lightpanda 也支持截图功能:

'use strict'

import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:9222",
});

const context = await browser.createBrowserContext();
const page = await context.newPage();

// 设置视口大小
await page.setViewport({ width: 1280, height: 720 });

await page.goto('https://demo-browser.lightpanda.io/campfire-commerce/', {waitUntil: "networkidle0"});

// 截图保存
await page.screenshot({ path: 'screenshot.png', fullPage: true });

console.log('截图已保存到 screenshot.png');

await browser.disconnect();

常见问题排查

Q1: 端口 9222 被占用

症状:启动时报错 "Address already in use"

解决:

# 查看谁在用这个端口
lsof -i :9222

# 或者换个端口
./lightpanda serve --port 9223
# 然后脚本里改成 ws://127.0.0.1:9223

Q2: Web API 不支持报错

症状:运行脚本时报错 "XXX is not defined"

解决:Lightpanda 目前还在 Beta 阶段,Web API 覆盖不完整。去 GitHub 提 issue,通常团队会很快响应。

Q3: Docker 容器启动失败

症状:docker run 报错或容器立即退出

解决:

# 查看容器日志
docker logs lightpanda

# 如果端口冲突,改一下
docker run -d --name lightpanda -p 9322:9222 lightpanda/browser:nightly

Q4: Puppeteer 连接不上

症状:Error: Protocol error (Target.attachToTarget): No target with given id

解决:确认 Lightpanda CDP 服务器已启动,并且版本与 Puppeteer 兼容。尝试重启:

# 杀掉旧进程
pkill lightpanda
# 重新启动
./lightpanda serve --port 9222

Q5: 页面加载超时

症状:TimeoutError: Navigation timeout

解决:

# 增加超时时间
await page.goto(url, { timeout: 60000 });
# 或者不用 networkidle0,改用 domcontentloaded
await page.goto(url, { waitUntil: "domcontentloaded" });

Q6: 想用 Playwright 而不是 Puppeteer

症状:不知道如何集成

解决:Playwright 的连接方式和 Puppeteer 类似:

import { chromium } from 'playwright';

const browser = await chromium.connectOverCDP('ws://127.0.0.1:9222');
// 后续用法一样

扩展阅读 / 进阶方向

1. 从源码编译

如果你想深入研究 Lightpanda 的内部实现,或者给它贡献代码,可以从源码编译:

# 安装 Zig 0.15.2
curl -L https://ziglang.org/download/0.15.2/zig-linux-x86_64-0.15.2.tar.xz | tar xJ

# 克隆项目
git clone https://github.com/lightpanda-io/browser.git
cd browser

# 编译
zig build run

2. Playwright 集成

Lightpanda 官方支持 Playwright。用法:

npm install playwright
import { firefox } from 'playwright';

const browser = await firefox.connectOverCDP('ws://127.0.0.1:9222');
// 后续用法和普通 Playwright 一样

WARNING

Playwright 支持有局限——因为 Lightpanda 会不断添加新的 Web API,Playwright 可能会选择不同的执行路径,导致某些脚本不工作。

3. 代理和网络拦截

Lightpanda 支持代理和网络请求拦截:

# 启动时指定代理
./lightpanda serve --proxy http://proxy:8080

4. 自定义 HTTP 头

await page.setExtraHTTPHeaders({
  'X-Custom-Header': 'value'
});

5. Web Platform Tests

Lightpanda 团队在持续推进 Web API 兼容性测试。你可以在 wpt.live 上测试特定 API 的支持情况。

Updated 2026年3月15日
    Lightpanda: 比Chrome快11倍的AI爬虫浏览器 | OpenClaw API 文档中心 - 开源 AI 助手集成指南