Surf 是一个通过命令行控制 Chrome 浏览器的自动化工具,也可通过 Unix socket 以编程方式调用,适用于测试、自动化与调试场景。
一、主要用途:浏览器自动化操作、页面截图、表单填写、页面元素检查、网络与性能调试,以及借助浏览器登录会话调用 AI 服务。
二、核心工作流:先用 surf navigate "https://example.com" 打开页面,再用 surf page.read 读取页面并获取元素引用(refs),随后用 surf click --ref "e1" 或坐标点击、surf type --text "hello" 输入文本、surf screenshot --output /tmp/shot.png 截图。
三、主要能力:
- 标签页与窗口管理:tab.list、tab.new、tab.switch、tab.close、tab.name 等;window.list、window.new(支持 --incognito、--unfocused、--url)、window.focus、window.close、window.resize 等。
- 元素定位与操作:可基于 refs、CSS 选择器或语义定位(locate.role、locate.text、locate.label)查找元素,支持 click、fill、hover、text 等动作;element.styles 可获取计算样式。
- 页面检查与搜索:page.read(可 --no-text、--ref、--depth、--compact)、page.text、page.state;search/find 文本查找。
- 表单自动化:form.fill 按 ref 批量填充;select 支持按 value、label、index 选择;upload 支持单/多文件上传。
- iframe 处理:frame.list、frame.switch、frame.main、frame.js。
- 网络与控制台检查:network、network.get、network.body、network.curl、network.origins、network.stats、network.export、network.clear;console、console --stream。
- JavaScript 执行:surf js "return document.title"。
- 等待与弹窗处理:wait、wait.element、wait.network、wait.url、wait.dom、wait.load;dialog.info、dialog.accept、dialog.dismiss。
- 设备与网络模拟:emulate.network(slow-3g、fast-3g、4g、offline)、emulate.cpu、emulate.device(19 种预设)、emulate.viewport、emulate.touch、emulate.geo。
- 截图、缩放、Cookie 与存储、历史与书签、性能指标(perf.metrics、perf.start、perf.stop)、健康检查与冒烟测试(health、smoke)。
- 工作流:支持管道式内联命令 surf do 'go "url" | click e5 | screenshot',以及保存为 JSON 的命名工作流(~/.surf/workflows/ 或 ./.surf/workflows/),含参数、循环、步骤输出,支持 --dry-run、--on-error、--step-delay、--json 等选项,并内置自动等待,可减少多次 CLI 调用与 token 开销。
- AI 助手调用(无需 API 密钥):surf chatgpt、surf gemini、surf perplexity、surf grok,支持 --with-page、--file、--model、--generate-image、--edit-image 等参数,依赖 Chrome 中已登录对应服务。
四、使用限制与注意:首次 CDP 操作较慢(约 5–8 秒,调试器附加开销),后续调用较快;AI 查询失败常见原因包括未登录、服务 UI 变更、模型不可用、思考型模型响应超时等,可用 surf grok --validate 检查,必要时 --save-models 保存发现的模型;现代编辑器(如 ChatGPT、Claude、Notion)需使用 --method js 处理 contenteditable;长耗时模型需更长 --timeout;建议优先使用 page.read 得到的 refs 进行元素定位;多步任务建议用 surf do 并先 --dry-run 验证;可用 window.new 加 --window-id 隔离代理工作;操作 iframe 前需先 frame.switch。
五、其他:官方文档、版本、安装方式、平台支持、收费与价格等信息暂未提供。