命令行工具
Skyvern-AI/rustwright avatar
Skyvern-AI/rustwright

Rustwright:用 Rust 引擎重写 Playwright,去掉 Node 驱动进程的代价与收益

该项目围绕「Playwright's API on a Rust CDP engine, Chromium browser automation for Python & Node, no driver subprocess. (Alpha).」构建,适用于实际场景的开源实践,提供可复用的工具链与集成方式。

888 个 Star58 个 ForkPythonMIT
GitHub

秒懂

它是什么?
Rustwright 将 Playwright 的 API 移植到原生 Rust CDP 引擎上,声称快 2.55 倍且内存少 70%,但仅支持 Chromium 且 API 覆盖不全。本文分析其架构、安装方式、限制与适用场景。
适合谁用?
Rustwright 适合那些已经依赖 Playwright API、但受困于 Node 驱动进程带来的内存开销或自动化指纹的 Python 或 Node 开发者,尤其是 AI 代理场景下的浏览器控制。不适合需要完整 Playwright API 覆盖、或必须支持 Firefox/WebKit 的团队。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 3 天前。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题:驱动进程的隐形开销

Playwright 的 Python 和 Node 绑定,本质上是通过管道与一个 Node 驱动子进程通信,再由这个驱动通过 CDP 控制浏览器。这个子进程不仅是额外的内存和 CPU 消耗,还引入了一个可被检测的自动化指纹。Rustwright 用 Rust 重写了整个驱动层,直接在你的进程内通过 WebSocket 或 Unix 管道与 Chromium 通信。文档声称这带来 2.55 倍的速度提升和 70% 的内存减少,但这些数字来自项目自身的 benchmark,尚未有独立验证。它面向的受众很明确:已经熟悉 Playwright API、但希望减少资源占用或规避自动化检测的开发者,尤其是 AI 代理场景下的浏览器控制。

架构核心:一条 Rust 异步 CDP 客户端

Rustwright 的架构是一个 Rust 核心,基于 Tokio 的异步 CDP 客户端,直接与 Chromium 对话。Python 绑定通过 PyO3,Node 绑定通过 napi-rs,两者都是薄封装,共享同一个 Rust 引擎。没有驱动子进程,意味着浏览器控制代码与你的应用运行在同一进程内。文档强调这是从零编写的 CDP 客户端,不是对其他自动化库的包装。它还支持跨源 iframe(OOPIF),自动附加进程外 iframe 目标,并使用扁平化 CDP 会话。输入事件走的是真实的 CDP 输入通道(Input.dispatchMouseEvent),而不是 DOM 的 element.click() 合成事件,这减少了被网站检测为自动化的可能性。

安装与启动:一条命令,改一行导入

Python 安装很简单:pip install rustwright,然后运行 python -m rustwright install chromium 下载浏览器。使用上,只需把 from playwright.sync_api import sync_playwright 改为 from rustwright.sync_api import sync_playwright,其余代码不变。Node 绑定目前是实验性的,npm install rustwright 后,需要通过环境变量 RUSTWRIGHT_CHROMIUM、CHROME 或 CHROMIUM 指向已有的 Chromium 或 Chrome 可执行文件。CLI 工具 rustwright-cli 可通过 curl 安装脚本获得,支持 open、snapshot、click 等命令,专为代理循环设计。MCP 服务器 rustwright-mcp 需要 Rust 工具链,通过 cargo install 安装,配置到 Claude Code 或 Claude Desktop 后即可提供 browser_* 工具。

API 覆盖与 Alpha 状态:不要期待完整

README 明确说只有 API 的子集被桥接,具体哪些方法可用需要查看 limitations 部分。这是一个关键限制:如果你的代码用到了 Playwright 的某个冷门 API,很可能在 Rustwright 中不存在。项目标注为 Alpha,CPython 3.15 支持仍基于预发布版本,CI 跟踪 3.15-dev。这意味着 API 可能随时变动,稳定性没有保证。对于生产环境,这是一个重大风险。文档没有提供完整的 API 兼容性列表,你需要自行检查或运行测试来确认你的调用是否被支持。

自动化检测:指纹消失的代价

Rustwright 声称没有 Playwright 自动化指纹,因为驱动从未加载。这是一个有吸引力的卖点,但要注意:它并不保证不被检测。网站可能通过其他方式识别自动化,比如 WebDriver 属性、浏览器特征或行为模式。文档也承认 refs 是 session-scoped 且 best-effort,不是安全边界。另外,输入事件走真实 CDP 通道,这降低了被 JS 检测到的概率,但并非绝对。如果你依赖自动化检测规避,Rustwright 可能比 Playwright 更隐蔽,但不要把它当作反检测工具。

与 Playwright 的对比:不只是性能差异

Playwright 支持三种浏览器(Chromium、Firefox、WebKit),而 Rustwright 仅支持 Chromium。这是一个根本性的差异,如果你需要跨浏览器测试,Rustwright 直接出局。另一个差异是驱动进程:Playwright 的 Node 驱动是独立的,可以单独升级或调试;Rustwright 将驱动嵌入你的进程,减少了资源消耗,但也意味着任何 Rust 引擎的崩溃都会直接拖垮你的应用。API 兼容性方面,Playwright 是完整的,Rustwright 是子集。如果你只用常用功能,迁移成本低;如果依赖高级特性,就需要仔细核对。

维护与升级成本:Alpha 阶段的现实

项目没有发布任何版本,也没有最近的 release 信息,这暗示它处于快速迭代期。维护成本取决于你如何分发:Python 包通过 PyPI,Node 包通过 npm,Rust 核心通过 crates.io。升级 Rust 核心可能需要重新编译绑定,对 Node 用户尤其麻烦。许可证是 MIT,允许商业使用,但你不应依赖未发布的 API 稳定性。文档没有提及长期支持或版本策略,这意味着你需要跟踪 main 分支的变动。对于追求稳定性的团队,这可能是一个阻碍。

编辑结论

Rustwright 适合那些已经依赖 Playwright API、但受困于 Node 驱动进程带来的内存开销或自动化指纹的 Python 或 Node 开发者,尤其是 AI 代理场景下的浏览器控制。不适合需要完整 Playwright API 覆盖、或必须支持 Firefox/WebKit 的团队。采用前应验证三件事:你的核心调用是否在已实现的 API 子集内,Chromium 版本兼容性,以及 3.15 的预发布状态是否影响你的 Python 环境。当前 Alpha 阶段意味着 API 可能变动,生产环境需谨慎。最终判断:如果你能接受 Chromium-only 和 API 子集,Rustwright 的架构优势是真实的,但不要指望它能无缝替换 Playwright。

官方来源

  1. Official README
  2. Project repository
社区笔记

社区笔记