Rodney v0.4.0:面向 Coding Agent 的浏览器自动化 CLI · 干货攻略

  • 链接: https://x.com/simonw/status/2023896441085948069
  • 分类: x-tips
  • 来源: X @simonw
  • 作者: Jay
  • 更新: 2026-09-15
  • 仓库: simonw/rodney

这是什么

Rodney 是 Simon Willison 用 Go 编写的命令行浏览器自动化工具,基于 go-rod/rod 库实现。与 Playwright/Puppeteer 等面向人类开发者的工具不同,Rodney 从第一天起就是为 coding agent 和 shell 脚本设计的。

核心设计:Chrome 以长驻进程运行(通过 Chrome DevTools Protocol 的 WebSocket),每次 rodney CLI 调用是一个短生命周期进程,连接到这个共享的 Chrome 实例执行一条命令后退出。这意味着你可以把浏览器自动化写成普通的 shell 脚本。

当前版本为 v0.4.0(2026 年 2 月 17 日发布),官方博文 提到该版本吸引了 5 位贡献者的 PR,是 Rodney 首次公开发布一周后的一次重大社区驱动更新。

为什么值得关注

AI coding agent(如 Cursor、Copilot、Claude Code)运行在终端环境中,能直接调用 shell 命令。Rodney 将浏览器自动化变成了一条 shell 命令,agent 无需任何 SDK 绑定或特殊协议接入——直接 rodney open URL 就能驱动浏览器。

与主流方案相比: - Playwright:面向开发者,需 Python/JS SDK;AI agent 需通过 MCP 等中间层接入 - Puppeteer:Node.js 生态,同上 - Rodney:纯 CLI,shell 即接口,DAU(Deterministic Accessibility Tree)输出紧凑,不会轻易撑爆 context window

v0.4.0 的多贡献者发布证明了小而专的工具也能快速聚拢社区——5 位贡献者在一周内提交了 9 项功能增强,从 Windows 支持到 accessibility testing 命令,体现了极强的工程迭代速度。

核验过程

  • 官方来源 1X @simonw 原文 — "New release of Rodney, my CLI tool for browser automation (designed for use by coding agents and with Showboat) - contributions from five people!"(2026-02-17)
  • 官方来源 2GitHub simonw/rodney README — 含架构说明、完整命令列表、安装方式
  • 官方来源 3Simon Willison 博客 v0.4.0 发布说明 — 含详细 changelog 和多贡献者背景
  • 官方来源 4GitHub Releases 页面 — v0.4.0(2026-02-17)、v0.3.0(2026-02-10)、v0.2.0(2026-02-10)、v0.1.0(2026-02-09)四个版本时间线
  • 交叉验证:Tavily 搜索 "Rodney CLI simonw browser automation 2026",确认生态博客 N+1 Blog 浏览器自动化全景图 将 Rodney 纳入 AI Agent 生态,定位为 Playwright CLI 的对标竞品

结论:原帖所述"多贡献者新版本"属实;Rodney 专为 coding agent 设计的定位在 README 和博客中均明确;版本号 v0.4.0 可在 GitHub Releases 交叉确认。

上手步骤

安装依赖

环境要求: - Go 1.21+(源码编译) - Google Chrome 或 Chromium(Linux/Windows/macOS 均支持) - 可选:设置 ROD_CHROME_BIN=/path/to/chrome 指定浏览器路径

安装 Rodney(当前无预编译二进制,需自行编译):

git clone https://github.com/simonw/rodney.git
cd rodney
go build -o rodney .
# 将 rodney 二进制加入 PATH

核心命令一览

启动与状态

rodney start                    # 启动 headless Chrome(后台常驻)
rodney start --show             # 启动带可视化窗口的 Chrome
rodney start --local            # 仅当前目录的 session(状态存在 ./.rodney/)
rodney start --insecure         # 忽略 TLS 证书错误(-k 简写)
rodney connect host:9222        # 连接远程已有的 Chrome debug port
rodney status                   # 查看当前浏览器状态
rodney stop                     # 关闭 Chrome 并清理状态

页面导航

rodney open https://example.com   # 导航到 URL
rodney open example.com           # 自动补 http://
rodney back                       # 后退
rodney forward                    # 前进
rodney reload                     # 刷新
rodney reload --hard              # 硬刷新(跳过缓存)
rodney clear-cache                # 清除浏览器缓存

信息提取

rodney url                         # 打印当前 URL
rodney title                       # 打印页面标题
rodney text "h1"                   # 获取元素文本
rodney html "div.content"          # 获取元素 HTML
rodney attr "a#link" href          # 获取元素属性值
rodney screenshot                   # 截图保存为 screenshot.png
rodney screenshot page.png          # 指定文件名
rodney screenshot -w 1280 -h 720 out.png  # 指定视口尺寸
rodney screenshot-el ".chart" chart.png   # 仅截图特定元素
rodney pdf output.pdf              # 导出 PDF

JavaScript 执行

rodney js document.title              # 执行 JS,打印返回值
rodney js "1 + 2"                     # 数学运算
rodney js 'document.querySelector("h1").textContent'
rodney js '[1,2,3].map(x => x * 2)'  # 返回 JSON 格式的 pretty-print 结果

元素交互

rodney click "button#submit"       # 点击元素
rodney input "#search" "query"    # 输入框填值
rodney clear "#search"             # 清空输入框
rodney file "#upload" photo.png    # 文件上传
rodney select "#dropdown" "value" # 下拉框选择
rodney submit "form#login"        # 表单提交
rodney hover ".menu-item"          # 悬停
rodney focus "#email"             # 聚焦元素

等待与同步

rodney wait ".loaded"      # 等待元素出现且可见
rodney waitload            # 等待 page load 事件
rodney waitstable          # 等待 DOM 稳定(不再变化)
rodney waitidle            # 等待网络空闲
rodney sleep 2.5           # 等待指定秒数

Tab 管理

rodney pages              # 列出所有 Tab(* 标记当前活动页)
rodney newpage https://... # 在新 Tab 打开
rodney page 1             # 切换到指定 Tab
rodney closepage 1        # 关闭指定 Tab

断言与检查(退出码语义)

rodney exists ".loading"          # 元素存在 → exit 0;不存在 → exit 1
rodney visible "#modal"           # 元素可见 → exit 0;不可见 → exit 1
rodney count "li.item"            # 打印匹配元素数量
rodney assert 'document.title' 'Home'   # 相等 → exit 0;不等 → exit 1

Rodney 区分三种退出码: - exit 0:成功 - exit 1:检查失败(条件不满足) - exit 2:命令执行错误(参数错误、无浏览器会话、超时等)

这使得 set -e 风格的 shell 脚本可以自然地处理检查失败。

Accessibility 测试(v0.2.0 新增)

rodney ax-tree              # 导出完整 accessibility 树
rodney ax-tree --depth 3    # 限制深度
rodney ax-tree --json       # JSON 格式输出
rodney ax-find --role button    # 按 role 查找所有元素
rodney ax-find --name "Submit"  # 按可访问名称查找
rodney ax-find --role button --name "Home" --json  # 组合过滤
rodney ax-node "h1" --json  # 查看单个元素的 a11y 属性

完整自动化示例

#!/bin/bash
set -euo pipefail

FAIL=0
check() {
  if ! "$@"; then
    echo "FAIL: $*"
    FAIL=1
  fi
}

rodney start
rodney open "https://example.com"
rodney waitstable

check rodney exists "h1"
check rodney visible "#main-content"
check rodney assert 'document.title' 'Example Domain'
check rodney ax-find --role navigation

rodney screenshot
rodney stop

if [ "$FAIL" -ne 0 ]; then
  echo "Some checks failed"
  exit 1
fi
echo "All checks passed"

与 Showboat 集成

Simon 用 Showboat(另一款工具)制作功能演示,v0.4.0 的 rodney assertrodney reload --hardrodney 退出码rodney start --local 都有配套演示。Rodney 设计上天然适合作为 Showboat 这类 agent 演示工具的后端。

坑与适用边界

  1. 无预编译二进制:Rodney 目前没有提供 pip/brew/apt 的预编译包,必须 go build 编译,对于没有 Go 环境的用户有上手门槛。官方文档建议直接 go build -o rodney . 编译。

  2. 需要自备 Chrome/Chromium:不捆绑浏览器,安装时需确保系统已有 Chrome。ROD_CHROME_BIN 环境变量可指定非标准路径。

  3. local vs global session 的隐式切换--local--global 标志可以出现在命令任意位置(rodney start --localrodney --local start 等价),但未指定时默认先查当前目录的 ./.rodney/state.json,找不到才用全局 session。新用户可能对此行为感到困惑。

  4. JavaScript 表达式的返回值约定rodney js 将表达式自动包装为 () => { return (expr); },因此只能返回有意义的值(不能是 undefined)。对于需要执行副作用的场景(如设置 window.value = 42)不适合。

  5. 非交互式设计:Rodney 是纯 CLI,不提供 Python/JS SDK 式的编程接口。如果你需要在自己的应用代码里驱动浏览器而非写 shell 脚本,应该直接使用 go-rod 库本身。

  6. 并发限制:所有命令共享同一个 Chrome 实例和活动 Tab,不支持多标签页并发自动化(需要自行管理 Tab 切换)。

一句话结论

Rodney 将浏览器自动化变成了一条 shell 命令,是当前 AI coding agent 生态中门槛最低、最符合 agent 交互范式的浏览器控制工具——如果你需要让 agent 操作网页,Rodney 值得优先考虑。