spel
Blockether/spel加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你在调试一个页面交互问题:按钮点击后弹出一个 iframe,内容加载时机不固定,纯 curl 根本拿不到。传统方案是写一段 Puppeteer/Playwright 脚本——新建项目、装 node_modules、写几十行代码,只为点一个按钮。
spel 带来了完全不同的体验。你只需要在终端里敲几条命令:
spel open https://news.ycombinator.com
spel markdownify # 获取页面内容为 Markdown
spel screenshot front-page.png # 截图保存
spel close
浏览器在你第一条命令时自动启动,后续所有操作复用同一个会话——没有冷启动、没有 node_modules、没有 JVM 环境安装。一条命令搞定所有事。

spel 终端快照:每个可交互元素被编号,可直接通过编号操作
spel 由 Blockether 团队开发,本质上是 Microsoft Playwright Java SDK 的 Clojure 封装,同时通过 GraalVM native-image 编译为独立二进制。项目的核心设计哲学是:用 Clojure 的方式做事,但让非 Clojure 开发者也能用。
Playwright 本身就有多语言绑定(Python、JavaScript、Java、C#),但 playwright-python 需要 Python 环境,playwright-node 需要 Node.js。spel 用 GraalVM native-image 把整个 Clojure 运行时和 Playwright Java SDK 打包成一个 71MB 的单文件二进制,真正做到了"零依赖"。
项目发布在 Clojars(Maven 仓库),也提供 GitHub Releases 预编译版本,覆盖 macOS(Intel/Apple Silicon)、Linux(amd64/arm64)、Windows 全平台。
spel 与 Claude Code --chrome 模式和其他 MCP 浏览器工具的本质区别在于持久化会话:
| 特性 | spel | Claude Code --chrome | 通用 MCP 浏览器工具 |
|---|---|---|---|
| 持久化会话 | ✅ 常驻浏览器 | ❌ 每次调用重启 | ❌ 通常无 |
| 无环境依赖 | ✅ 单二进制 | ✅ 内置 | ❌ 依赖各自 SDK |
| 截图标注 | ✅ @ref 编号快照 | ❌ | ❌ |
| E2E 测试生成 | ✅ JSONL → Clojure 测试 | ❌ | ❌ |
| Allure 报告 | ✅ 含网络追踪 | ❌ | ❌ |
当你需要在一个页面执行多个操作(登录 → 填表 → 提交 → 截图),持久化会话意味着不需要反复初始化浏览器,执行速度快得多。
spel 的野心不止于"远程控制浏览器"。它内置了两项高级能力:
内联 Clojure 脚本执行(通过 SCI)。spel eval 可以运行任意 Clojure 表达式,和浏览器状态联动:
spel open https://example.com
spel eval "(js/document.title)" # 获取页面标题
spel eval "(clojure.string/upper-case ...)" # 数据处理
会话录制与测试生成。用 spel record 开启录制模式,所有交互保存为 JSONL 文件,随后用工具自动生成可执行的 Clojure 测试代码。这意味着你可以在浏览器里手动操作一遍业务流程,然后直接得到一套回归测试。

spel eval 效果:在真实浏览器上下文中运行 Clojure 脚本
spel 的安装流程极为简洁:
# Linux 一行安装
curl -LO https://github.com/Blockether/spel/releases/latest/download/spel-linux-amd64
chmod +x spel-linux-amd64 && mv spel-linux-amd64 ~/.local/bin/spel
# 安装浏览器驱动
spel install
# 验证
spel version
项目不提供 Dockerfile 或 docker-compose,这既是局限也是合理选择——浏览器自动化工具本身需要图形环境和用户交互,容器化场景(尤其是 headless CI)可以通过 spel 命令行在容器内直接运行。项目支持 headless 模式,与 CI 系统天然契合。
值得注意的是,spel 支持企业 SSL 证书代理场景(Zscaler、Netskope 等),通过 SPEL_CA_BUNDLE、NODE_EXTRA_CA_CERTS 等环境变量配置,解决了企业内网用户的痛点。
spel 的代码库体现了扎实的 Clojure 工程实践:
代码风格遵循 Clojure 惯用写法,使用 cljfmt 格式化、clj-kondo lint,代码可读性良好。README 中对 AGENTS.md 有专门引用,说明项目作者主动为 AI Agent 做了上下文优化——这对当下 AI 辅助编程趋势很有价值。
spel 最大的局限在于没有传统 Web UI,它本质上是一个面向开发者的 CLI 工具。虽然"命令行即界面"的哲学在极客群体中很受欢迎,但这也限制了非技术用户的上手意愿。
其次,GraalVM native-image 编译的二进制虽然解决了"JVM 依赖"问题,但 71MB 的单文件体积对于网络条件差的场景仍然是一道门槛。相比之下,Playwright 的 Node.js SDK 按需下载浏览器二进制(通常更小),但需要完整的 Node 环境。
最后,spel 的 生态系统相对小众——Clojure 开发者本身是少数派,对 Playwright 有强需求的 QA 工程师和数据采集工程师更习惯 Python/JavaScript 生态。项目需要在非 Clojure 群体中建立认知和影响力。
在浏览器自动化领域,工具链越来越复杂是普遍趋势——Puppeteer/Playwright 需要包管理器,Selenium 需要 WebDriver 配置,Cypress 有自己的测试框架。spel 反其道而行:极致的安装简便性 + 持久化会话 + 终端优先设计,满足了从数据采集到 E2E 测试的多场景需求,同时保持了零运维复杂度。
特别值得关注的是它在 AI Agent 集成方面的设计:AGENTS.md 提供了 AI Agent 使用 spel 的行为规范,templates/agents/spel.md 和 templates/skills/spel/SKILL.md 为 AI 助手提供上下文指导。这在 AI Agent 快速发展的当下,是一个很有前瞻性的定位。
一句话总结:spel 是一个用 Clojure 封装 Playwright、通过 GraalVM native-image 实现零依赖分发的命令行浏览器自动化工具,特别适合需要持久化会话、终端优先的开发者、QA 工程师和数据采集场景。