研发协作
需要轻量级无头浏览器做 AI 代理或大规模网页抓取时,用…
当需要 CDP 兼容的无头浏览器进行网页抓取、AI 代理浏览或批量自动化,且对内存和速度敏感时,使用 Zig 编写的 Lightpanda。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要轻量级无头浏览器做 AI 代理或大规通用
解决思路
- 安装:macOS (Apple Silicon) 执行 `curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-aarch64-macos` 后 `chmod a+x ./lightpanda`;Linux (x86_64) 把 URL 换成 `lightpanda-x86_64-linux`;或用 Docker:`docker run -d --name lightpanda -p 9222:9222 lightpanda/browser:nightly`(支持 amd64 和 arm64)。
- 抓取单个 URL 并输出渲染后的 HTML:`./lightpanda fetch --obey_robots --log_format pretty --log_level info https://example.com`。
- 启动 CDP 服务器供程序化控制:`./lightpanda serve --obey_robots --log_format pretty --log_level info --host 127.0.0.1 --port 9222`。
- CLI 常用参数:`--obey_robots` 遵守 robots.txt;`--log_format pretty` 人类可读日志;`--log_level` 取 debug/info/warn/error;`--host` 绑定地址;`--port` 端口;`--insecure_disable_tls_host_verification` 关闭 TLS 校验(仅测试用)。
- Playwright 集成:先启动 CDP 服务器,再用 `chromium.connectOverCDP('http://127.0.0.1:9222')` 连接,取 `browser.contexts()[0]` 或新建 context,`page.goto(url, { waitUntil: 'networkidle' })` 后读取 `page.title()` 和 `page.content()`。
- Puppeteer 集成:用 `puppeteer.connect({ browserWSEndpoint: 'ws://127.0.0.1:9222' })` 连接,`createBrowserContext()` 后新建 page,`page.goto(url, { waitUntil: 'networkidle0' })`,用 `page.evaluate(() => document.body.innerText)` 取文本。
- Go (chromedp) 集成:用 `chromedp.NewRemoteAllocator(context.Background(), "ws://127.0.0.1:9222")` 创建远程分配器,再 `chromedp.NewContext`,通过 `chromedp.Run` 执行 `chromedp.Navigate` 和 `chromedp.Title`。
- Python 集成:用 `async_playwright()` 的 `p.chromium.connect_over_cdp("http://127.0.0.1:9222")` 连接,取 `browser.contexts[0]` 或新建 context,`page.goto(url, wait_until="networkidle")` 后读取 title 和 content。
- 批量抓取:连接 CDP 后新建一个 context,对 URL 列表循环 `context.newPage()` → `page.goto(url, { waitUntil: 'networkidle' })` → `page.evaluate` 提取数据 → `page.close()`,最后关闭 browser。
- 提取结构化数据:在 `page.evaluate` 中用 `document.querySelectorAll('.product-card')` 遍历,对每项取 `querySelector('h2')?.textContent?.trim()`、`.price` 文本和 `a` 的 href。
- 与自有应用一起用 Docker Compose 部署:定义 `lightpanda` 服务(image: lightpanda/browser:nightly,端口 9222:9222,restart: unless-stopped)和 scraper 服务(depends_on lightpanda,环境变量 `BROWSER_WS_ENDPOINT=ws://lightpanda:9222`)。
- 支持的 Web API(部分):DOM 树操作与查询、JavaScript 执行 (V8)、XMLHttpRequest、Fetch API、Cookie 管理、网络拦截、代理支持。
- 配置:设置环境变量 `LIGHTPANDA_DISABLE_TELEMETRY=true` 可退出使用指标收集。
- 从源码构建:需 Zig 0.15.2、Rust、CMake 及系统依赖;Ubuntu/Debian 先 `sudo apt install xz-utils ca-certificates pkg-config libglib2.0-dev clang make curl`,然后 `git clone https://github.com/lightpanda-io/browser.git && cd browser && zig build`;可选预构建 V8 快照加速启动:`zig build snapshot_creator -- src/snapshot.bin` 再 `zig build -Dsnapshot_path=../../snapshot.bin`。
- 排障:端口 9222 连接被拒时确认 `./lightpanda serve` 在运行,Docker/远程连接时用 `--host 0.0.0.0`;Playwright 脚本在更新后失效时,因 Lightpanda 处于 beta,固定版本或统一使用 nightly;缺少 Web API 支持时查阅 zig-js-runtime 仓库的 API 覆盖情况并在 lightpanda-io/browser 提 issue。
适用边界 · 注意事项
- 需要像素级精确的截图或 PDF 生成时,改用 Chrome/Playwright。
- 需要完整 Web API 覆盖或做视觉回归测试、测试浏览器特定渲染行为时,Lightpanda 仍不完整。
- 需要可视化渲染引擎时(Lightpanda 不做视觉渲染)。