Carbonyl

服务端浏览器市场的强力竞争者——在终端里运行完整 Chromium


⚔️ 核心定位

Carbonyl 是一个专为命令行环境设计的 Chromium 浏览器,完全在无 GUI 的服务器或终端环境中运行。区别于传统”无头浏览器”,它支持完整的 CSS 动画、JavaScript 执行,甚至可以用 ASCII 字符在终端渲染页面。


🚀 技术特点

性能优异

指标说明
启动速度比 Puppeteer/Playwright 快 2-3 倍
内存占用更轻量,适合服务器环境
二进制大小单文件,约 50-80MB

完整的浏览器能力

  • 完整的 CSS/JS 支持,包括 CSS 动画
  • JavaScript 渲染页面抓取
  • 网页截图(整页或指定区域)
  • PDF 生成
  • 控制台日志捕获

独特的终端渲染

Carbonyl 支持将页面渲染为 ASCII 字符画,直接在终端查看效果:

carbonyl --ascii https://example.com

这在快速预览页面而不离开终端时非常有用。


📦 安装方式

# npm 全局安装
npm install -g carbonyl
 
# 或下载对应平台的二进制
curl -fsSL https://github.com/browser-automation/carbonyl/releases/latest/download/carbonyl-linux.tar.gz | tar xz

⌨️ 常用命令

基本使用

# 截图
carbonyl --screenshot https://example.com output.png
 
# 生成 PDF
carbonyl --pdf https://example.com output.pdf
 
# 终端 ASCII 预览
carbonyl --ascii https://example.com
 
# 交互模式
carbonyl https://example.com

进阶用法

# 指定视口大小截图
carbonyl --screenshot --viewport-width=1920 --viewport-height=1080 https://example.com output.png
 
# 等待页面加载完成
carbonyl --wait-until=networkidle2 --screenshot https://example.com output.png
 
# 隐藏元素
carbonyl --hide-element=".advertisement" --screenshot https://example.com output.png

编程调用

import { Chromium } from 'carbonyl';
 
const browser = await Chromium.launch();
const page = await browser.newPage();
 
await page.goto('https://example.com');
await page.screenshot({ path: 'output.png' });
 
await browser.close();

💡 适用场景

✅ 适合的场景

场景说明
服务端截图服务快速搭建截图 API,不依赖 Puppeteer 的 Node.js 环境
CI/CD 自动化测试轻量级浏览器环境,GitHub Actions 等场景
网页内容抓取需要 JS 渲染的 SPA 应用
PDF 生成服务端批量生成报告
终端快速预览查看网页而不离开终端

❌ 不适合的场景

  • 需要完整浏览器交互(点击、表单提交)
  • 复杂的多页面自动化流程
  • 需要 Chrome 扩展支持

⚖️ 对比其他工具

特性CarbonylPuppeteerPlaywright
启动速度🚀 快🐌 中等🐌 中等
语言生态多语言Node.js多语言
功能完整度基础为主完整最完整
终端渲染
安装便捷性⭐⭐⭐⭐⭐⭐⭐

🔧 实际应用示例

快速搭建截图 API

# 简单脚本
#!/bin/bash
url=$1
output=$2
carbonyl --screenshot --viewport-width=1280 "$url" "$output"

配合 nc 或简单的 HTTP 服务器可以快速做成截图服务。

批量生成 PDF 报告

# urls.txt 每行一个 URL
while read url; do
  name=$(basename "$url")
  carbonyl --pdf "$url" "reports/${name}.pdf"
done < urls.txt

⚠️ 注意事项

  • Carbonyl 仍处于活跃开发中,API 可能会有变化
  • 部分复杂的 WebGL 特性可能不支持
  • 调试能力相对简单,建议先用交互模式测试

🔗 相关工具