Scout 深度调研:Outcrawl 开源的浏览器 Agent,凭什么值得单独看
Scout 把 LLM 拆成四个岗位——这是 browser-use 也没按角色切的一种做法。Playwright 是执行层不接 LLM,不在同一层。
数据截止 2026-10-22,所有数字来自 GitHub API / npm registry / 官方 README 原文,逐条可查。
一、Scout 是什么,不是什么
Scout 是 Outcrawl 开源的浏览器 Agent,Apache-2.0 许可,TypeScript 实现,Node 22+ 运行。它的定位一句话能说完:
你说一句人话,它开一个真浏览器,读页面、点、输入、滚动,直到事情做完;做不完就把已经拿到的结果交回来,并说清楚缺什么。
(README 英文原文:“Tell it the task. It opens a browser and gets it done.”——中文是意译。)它不是又一个 puppeteer 的高阶封装,也不是又一个 browser-use 的 Python 版本。它是 Outcrawl 把自家云端 agent 背后的执行引擎直接开出来的一个"最小内核"——你既能用它接自己的模型跑,也能通过它去理解浏览器 agent 这个物种到底怎么走得通。
| GitHub | outcrawlai/scout |
| Stars / Forks | 962 / 30(2026-10-22 实测) |
| 创建 / 最后 push | 2026-10-13 / 2026-10-21 |
| License | Apache-2.0 |
| 语言 / 运行时 | TypeScript / Node.js >= 22 |
| npm 包 | @outcrawl/scout v0.1.1(2026-10-13 首发) |
| 主仓库 | Outcrawl 内部,GitHub 是自动镜像(README 原文:“Mirrored automatically from Outcrawl’s own repository”) |
要提醒的一个点:仓库描述明确写了"自动镜像"。这意味着主开发不在 GitHub 上,PR 和 issue 走 Outcrawl 内部流程。你提 issue 的路径和普通开源项目不一样——它更像是一个"官方发布",而不是社区协作。
二、为什么它值得单独看:四个岗位的模型分工
Scout 最不一样的设计,是它不认为"一个模型干所有事"是默认。它的配置里有四个岗位:
| hands | ✅ | 读页面的无障碍树,决定下一步动作:点击、输入、滚动、跳转、读取 | 快模型(每一步都调用) |
| brain | ❌ | 看页面的压缩视图和已完成进度,负责跨页面的规划 | 强推理模型 |
| eyes | ❌ | 需要看截图时回答问题 | 必须支持图像输入 |
| extract | ❌ | 把长页面读成结构化结果,字段要求严格时用它 | 结构化输出能力强的模型 |
README 的原话是:
hands uses a fast model, brain uses a strong reasoning model, cost can be pushed down a lot. The price is more complex configuration.
这个拆法很实用。一个 4 步的短任务只需要 hands,跨页面 20 步的长任务再挂一个 brain,只有页面真的需要看图(验证码、图表、设计稿对比)才配 eyes,最后要结构化输出才配 extract。每一步都省一次贵模型的调用。
代价是配置变复杂——Scout 明确说了:
Scout has no built-in model and no default. You choose a model for each job, on any service that speaks the chat completions API.
没有默认模型、没有默认供应商,baseURL / apiKey / model 都得自己填。这也意味着:本地 Ollama 能接,OpenAI 兼容的国内模型(智谱、DashScope、Kimi)也能接,Anthropic 和 Gemini 的原生 API 不行——它们不是 OpenAI 兼容协议。
2.1 一个岗位的真实配置长这样
const scout = new Scout({
browser: 'outcrawl', // 或者 { launch: {} } 用本机浏览器
models: {
hands: { model: 'your-fast-model', baseURL: urlA, apiKey: *** },
brain: { model: 'your-strong-model', baseURL: urlB, apiKey: *** },
eyes: { model: 'your-vision-model', baseURL: urlA, apiKey: *** },
extract: { model: 'your-local-model', baseURL: localUrl, apiKey: *** },
},
});
四个岗位可以用不同的端点、不同的模型、不同的 key。这是 Scout 最灵活的地方,也是最劝退新手的地方。生产环境不要把 apiKey 硬编码到源码里,用 env 或 SecretRef 注入。
#mermaid-svg-4CeEAv7XfKWSoBD7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4CeEAv7XfKWSoBD7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4CeEAv7XfKWSoBD7 .error-icon{fill:#552222;}#mermaid-svg-4CeEAv7XfKWSoBD7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4CeEAv7XfKWSoBD7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4CeEAv7XfKWSoBD7 .marker.cross{stroke:#333333;}#mermaid-svg-4CeEAv7XfKWSoBD7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4CeEAv7XfKWSoBD7 p{margin:0;}#mermaid-svg-4CeEAv7XfKWSoBD7 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-4CeEAv7XfKWSoBD7 .cluster-label text{fill:#333;}#mermaid-svg-4CeEAv7XfKWSoBD7 .cluster-label span{color:#333;}#mermaid-svg-4CeEAv7XfKWSoBD7 .cluster-label span p{background-color:transparent;}#mermaid-svg-4CeEAv7XfKWSoBD7 .label text,#mermaid-svg-4CeEAv7XfKWSoBD7 span{fill:#333;color:#333;}#mermaid-svg-4CeEAv7XfKWSoBD7 .node rect,#mermaid-svg-4CeEAv7XfKWSoBD7 .node circle,#mermaid-svg-4CeEAv7XfKWSoBD7 .node ellipse,#mermaid-svg-4CeEAv7XfKWSoBD7 .node polygon,#mermaid-svg-4CeEAv7XfKWSoBD7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4CeEAv7XfKWSoBD7 .rough-node .label text,#mermaid-svg-4CeEAv7XfKWSoBD7 .node .label text,#mermaid-svg-4CeEAv7XfKWSoBD7 .image-shape .label,#mermaid-svg-4CeEAv7XfKWSoBD7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-4CeEAv7XfKWSoBD7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4CeEAv7XfKWSoBD7 .rough-node .label,#mermaid-svg-4CeEAv7XfKWSoBD7 .node .label,#mermaid-svg-4CeEAv7XfKWSoBD7 .image-shape .label,#mermaid-svg-4CeEAv7XfKWSoBD7 .icon-shape .label{text-align:center;}#mermaid-svg-4CeEAv7XfKWSoBD7 .node.clickable{cursor:pointer;}#mermaid-svg-4CeEAv7XfKWSoBD7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4CeEAv7XfKWSoBD7 .arrowheadPath{fill:#333333;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4CeEAv7XfKWSoBD7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4CeEAv7XfKWSoBD7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4CeEAv7XfKWSoBD7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4CeEAv7XfKWSoBD7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4CeEAv7XfKWSoBD7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4CeEAv7XfKWSoBD7 .cluster text{fill:#333;}#mermaid-svg-4CeEAv7XfKWSoBD7 .cluster span{color:#333;}#mermaid-svg-4CeEAv7XfKWSoBD7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4CeEAv7XfKWSoBD7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4CeEAv7XfKWSoBD7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-4CeEAv7XfKWSoBD7 .icon-shape,#mermaid-svg-4CeEAv7XfKWSoBD7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4CeEAv7XfKWSoBD7 .icon-shape p,#mermaid-svg-4CeEAv7XfKWSoBD7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4CeEAv7XfKWSoBD7 .icon-shape rect,#mermaid-svg-4CeEAv7XfKWSoBD7 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4CeEAv7XfKWSoBD7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4CeEAv7XfKWSoBD7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4CeEAv7XfKWSoBD7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
run task
使用者
Scout 运行时
brain 强模型可选:跨页面规划
hands 快模型必填:每步决策
eyes 视觉模型可选:看图
extract 结构化模型可选:schema 输出
浏览器
结果 + 步骤记录
实线是 hands(必填),虚线是三个可选岗位。短任务只走 hands,长任务才加 brain,看图才加 eyes,结构化输出才加 extract。
三、三方对比:Playwright / browser-use / Scout 到底差在哪
这三个名字经常被混着比,实际上根本不在同一层:
- Playwright 是执行层——你用代码写死路径,它在浏览器上执行。
- browser-use 和 Scout 是决策层——路径由模型每一步现决定。
所以正确的问法不是"Scout 比 Playwright 强吗",而是"这件事值不值得交给模型现场决策"。
#mermaid-svg-lkWpFffVeff6GZR8{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lkWpFffVeff6GZR8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lkWpFffVeff6GZR8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lkWpFffVeff6GZR8 .error-icon{fill:#552222;}#mermaid-svg-lkWpFffVeff6GZR8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lkWpFffVeff6GZR8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lkWpFffVeff6GZR8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lkWpFffVeff6GZR8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lkWpFffVeff6GZR8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lkWpFffVeff6GZR8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lkWpFffVeff6GZR8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lkWpFffVeff6GZR8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lkWpFffVeff6GZR8 .marker.cross{stroke:#333333;}#mermaid-svg-lkWpFffVeff6GZR8 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lkWpFffVeff6GZR8 p{margin:0;}#mermaid-svg-lkWpFffVeff6GZR8 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-lkWpFffVeff6GZR8 .cluster-label text{fill:#333;}#mermaid-svg-lkWpFffVeff6GZR8 .cluster-label span{color:#333;}#mermaid-svg-lkWpFffVeff6GZR8 .cluster-label span p{background-color:transparent;}#mermaid-svg-lkWpFffVeff6GZR8 .label text,#mermaid-svg-lkWpFffVeff6GZR8 span{fill:#333;color:#333;}#mermaid-svg-lkWpFffVeff6GZR8 .node rect,#mermaid-svg-lkWpFffVeff6GZR8 .node circle,#mermaid-svg-lkWpFffVeff6GZR8 .node ellipse,#mermaid-svg-lkWpFffVeff6GZR8 .node polygon,#mermaid-svg-lkWpFffVeff6GZR8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lkWpFffVeff6GZR8 .rough-node .label text,#mermaid-svg-lkWpFffVeff6GZR8 .node .label text,#mermaid-svg-lkWpFffVeff6GZR8 .image-shape .label,#mermaid-svg-lkWpFffVeff6GZR8 .icon-shape .label{text-anchor:middle;}#mermaid-svg-lkWpFffVeff6GZR8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lkWpFffVeff6GZR8 .rough-node .label,#mermaid-svg-lkWpFffVeff6GZR8 .node .label,#mermaid-svg-lkWpFffVeff6GZR8 .image-shape .label,#mermaid-svg-lkWpFffVeff6GZR8 .icon-shape .label{text-align:center;}#mermaid-svg-lkWpFffVeff6GZR8 .node.clickable{cursor:pointer;}#mermaid-svg-lkWpFffVeff6GZR8 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lkWpFffVeff6GZR8 .arrowheadPath{fill:#333333;}#mermaid-svg-lkWpFffVeff6GZR8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lkWpFffVeff6GZR8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lkWpFffVeff6GZR8 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lkWpFffVeff6GZR8 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lkWpFffVeff6GZR8 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lkWpFffVeff6GZR8 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lkWpFffVeff6GZR8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lkWpFffVeff6GZR8 .cluster text{fill:#333;}#mermaid-svg-lkWpFffVeff6GZR8 .cluster span{color:#333;}#mermaid-svg-lkWpFffVeff6GZR8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lkWpFffVeff6GZR8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lkWpFffVeff6GZR8 rect.text{fill:none;stroke-width:0;}#mermaid-svg-lkWpFffVeff6GZR8 .icon-shape,#mermaid-svg-lkWpFffVeff6GZR8 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lkWpFffVeff6GZR8 .icon-shape p,#mermaid-svg-lkWpFffVeff6GZR8 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lkWpFffVeff6GZR8 .icon-shape rect,#mermaid-svg-lkWpFffVeff6GZR8 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lkWpFffVeff6GZR8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lkWpFffVeff6GZR8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lkWpFffVeff6GZR8 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
执行层:动作由谁执行
决策层:路径由谁决定
调 Playwright API
调 Playwright API
browser-usePython 生态单模型/多模型
ScoutTypeScript/Node 22+四岗位独立模型
PlaywrightChromium/Firefox/WebKit确定性可进 CI
3.1 同层对比:Scout vs browser-use
| License | MIT(据官方 README,未在本次核实) | Apache-2.0(GitHub API 实测) |
| Stars(2026-10-22 实测) | 118,780(GitHub API 实测) | 962(GitHub API 实测) |
| 语言 / 生态 | Python | TypeScript / Node 22+ |
| 模型接入 | 内置多家供应商适配 | 无内置适配,仅 OpenAI 兼容协议 |
| 模型分工 | 支持多模型,但不分岗 | 四岗位独立模型 |
| 步数/时长上限 | 无原生 | caps: { steps, duration, budget } |
| 云端回放 | 无(有本机事件钩子 agent.history / on_step) | onStep 回调 + 云端完整回放 |
| 版本 | 0.x 快速迭代 | 0.1.1(首版) |
注:browser-use 相关行来自其公开文档,本次仅对 Scout 部分做了逐条 API/registry 核实;引用前请再核一次。
3.2 分层说明:Playwright 不该和 Scout/browser-use 并列
Playwright 是执行层,Scout 和 browser-use 是决策层。硬把三方塞进一张表会出现"Playwright 结构化输出:无原生"这类错层对比——Playwright 是浏览器自动化库,不是 LLM 框架,谈结构化输出本身就是维度过界。
这里单独列 Playwright 关键信息:
| License | TypeScript/Python: Apache-2.0;Java: LGPL-3.0(Java 用户注意区分) |
| 定位 | 执行层工具,不接模型 |
| 官方伴侣包 | @playwright/mcp(微软维护的独立 npm 包,非 Playwright 库本体) |
| 特色 | 自动等待、网络拦截、trace、codegen,确定性可进 CI |
3.3 Scout 在三个维度上比 browser-use 领先
| 模型分岗 | 长任务里贵的模型只做规划(brain),便宜的做执行(hands) | 长任务的账单明显可控 |
| onStep 逐步回放 | 每一步的动作描述和决策都能拿到 | Agent 最难的不是跑通,是跑挂之后不知道挂在哪——onStep 直接解决这个 |
| caps 硬边界 | steps / duration / budget 三重限制 | 不会无限烧钱、不会跑飞 |
3.4 browser-use 在两个维度上明显领先 Scout
| 社区体量 | 11.8 万星 vs Scout 962;踩坑帖、教程、集成生态丰富得多 |
| 开箱体验 | 自带供应商适配,model="gpt-4o" 一行开跑;Scout 必须自己填 baseURL/apiKey/model |
3.5 中间态:Playwright MCP
还有一个常被忽略的选项:微软官方维护了一个伴侣包 @playwright/mcp(独立 npm 包,不是 Playwright 库本体),让模型调用"打开页面"“点这个元素”"读这块文本"这类确定性工具。路径由 LLM 选,动作由 Playwright 执行。
相比纯 Agent,动作空间被收敛、幻觉面小;相比纯脚本,入口变化时能自适应。注意 MCP 模式下决策层仍是 LLM,不保证整条链路稳定。
如果你已经在用 Playwright 做自动化测试,Playwright MCP 是自然延伸,不必换到 Scout 或 browser-use。
四、92.5% 这个基准数字:可信吗
Scout 官方给的基准是:在 Browser Use 的 80 站点 benchmark 上跑到 92.5%,第二名 81.4%。这是 README 里的原文,来自 2026 年 10 月 7 日的三次完整测试。
这个数字要怎么看:
- 供应商自报——用的是 Outcrawl 自己的评分代码,没有第三方复核。
- 对照对象未标明——README 只写"第二名",没说是哪个模型或哪个 agent 组合。
- 相对位置有参考价值——第二名 81.4%,Scout 领先 11 个百分点,不是 0.1% 的差异。
- 不能当成通用结论——每个站点结构不同,Scout 可能在自家擅长的类型上强、在别的类型上弱。
建议:想拿它替换现有爬虫之前,先拿自己的目标站点跑一轮。别拿别人的分数做决策。
五、Scout 独有的机制:值得单独看的三个设计
5.1 caps 硬边界
const result = await scout.run(task, {
caps: { steps: 15, duration: '8m', budget: '0.50' }, // budget 需 models.rates
});
- steps:步数上限(默认 40,README 原文)
- duration:时长上限(默认 ‘10m’,README 原文)
- budget:模型花费上限(美元,需要配 models.rates)
达到 caps 是正常结束,不是错误。结果里已经拿到的部分会正常返回,附带一句"缺什么"。
注意:caps 只是成本和时长护栏,不是安全护栏。它不阻止 agent 执行不该做的动作,也不做合规审查。
5.2 schema + extract 专岗
const result = await scout.run(task, {
schema: {
type: 'object',
properties: {
books: {
type: 'array',
items: {
type: 'object',
properties: {
title: { type: 'string' },
price: { type: 'number' },
stars: { type: 'integer', minimum: 1, maximum: 5 },
},
required: ['title', 'price', 'stars'],
},
},
},
required: ['books'],
},
});
Scout 的 hands 岗位默认会用工具调用(tool_choice)拿结构化结果,如果模型不认这个模式可以降级到 structuredOutput: 'json_object' 或 'strict'。这不是简单的 prompt 里说一句"返回 JSON"——是真走 tool calling 协议。
5.3 onStep 逐步回放
const result = await scout.run(task, {
onStep: (step) => {
console.log(`step ${step.index}: ${step.action.description}`);
},
});
每一步都能拿到动作描述,本地就能做调试和可观测性。云端版本还能生成完整回放 URL,看整个运行过程的每一步操作。
六、什么时候必须回到 Playwright
Agent 不是升级版自动化。下面这些场景,用 Playwright 更对:
| 高频且路径固定 | 每天几千次的下单、对账、巡检——模型每步都要推理,延迟和成本都吃不消 |
| 需要审计 | 金融、医疗等场景需要"为什么点这里"有明确代码依据,模型给不出可复核的理由 |
| 需要确定性回归 | CI 里跑一万次结果必须一样,agent 的不确定性会变成随机失败 |
| 页面简单、结构稳定 | 写二十行 Playwright 能解决的,不值得为它接一套模型编排 |
反过来,下面这些用 agent 更省事:
- 一次性调研(跨多个站点汇总)
- 没有 API 的老系统
- 页面经常改版导致选择器天天坏
- 需要"看着页面判断"的活(不是简单 DOM 查询,是理解内容)
七、Scout 的三个短板
写在前面比藏在后面好:
7.1 版本太新
- 0.1.x,npm 上刚发到 0.1.1
- 主开发在 Outcrawl 内部,GitHub 仓库是自动镜像
- 接口还会变,提 issue 的路径和普通开源项目不一样
观察 3 个月,看看是否有 0.3+/0.5 稳定版,再评估生产接入。
7.2 开箱不能跑
没有默认模型、没有默认供应商,baseURL / apiKey / model 全要自己填。想十分钟跑通 demo,browser-use 更顺。
7.3 闭源部分藏得深
Scout 本体是 Apache-2.0,但住宅代理、验证码解决、云端回放、托管 MCP 全在 Outcrawl 商业云,开源自托管跑不出来。这是"开源 ≠ 自由"的典型例子:协议层开放了,但真正好用的能力在商业云。
本机模式免费,但住宅代理、验证码、回放都在云端,按 1 credit/分钟 + 代理流量计费。每月 1000 免费 credits 只够试水,做长期自动化得另算预算。
八、安全与法律边界
这一节不能省。 浏览器 Agent 是高危工具,CSDN 读者群里有企业用户,实操前必须先知道三条边界。
8.1 反爬与法律边界
Scout 云版带"住宅代理",本质是绕过 IP 反爬。相关法规(举例,不穷举):
- 美国:CFAA(Computer Fraud and Abuse Act)——未授权访问计算机系统的刑事责任
- 欧盟:GDPR——个人数据处理合规(数据保护法规,非反爬专项法)
- 中国:《反不正当竞争法》《数据安全法》《个人信息保护法》《网络安全法》《互联网信息服务管理办法》
这几部法规都对"绕过反爬"存在模糊地带,尤其在跨国访问场景下。通用建议:只在你有权访问的站点跑 agent;遵守 robots.txt;不要在未获授权的情况下抓敏感数据;商用前请让法务过一遍。国内用户在国内跑跨国站点,风险自负。
8.2 数据外泄面
即使本机模式,只要调了云端模型 API(智谱、OpenAI、DashScope 等),页面上的账号、密码、Cookie 都可能进入第三方模型上下文。企业场景必须:
- 只用脱敏过的账号跑调试
- 敏感系统(银行后台、客户数据)不接任何第三方模型
- 需要完全本地时用 Ollama 起本地模型
8.3 caps 不是安全护栏
caps.steps / caps.budget 只防成本失控,不防 agent 点了不该点的按钮、不防敏感数据被外传。真正要防风险,得靠任务本身的边界设计,不是靠 caps。
九、给你的三条实操建议
建议 1:把 Playwright 当底座,别当对手
Scout 本机模式就是启动 Chromium,也能接已有的 CDP 浏览器。真实项目里常见的组合是:
Agent 负责探索和生成路径,稳定下来的部分固化成 Playwright 脚本进 CI。
建议 2:先本机跑,别急着上云
本机模式不经过 Outcrawl,不计费,配一个便宜模型就能试。云端贵在住宅代理、验证码和回放,等你确实被反爬卡住、或者需要复盘时再切。
建议 3:按任务长度分模型
- 三五步能完事的,只配 hands。
- 跨页面、要多步规划的,再加 brain。
- 需要读图(验证码、图表、设计稿对比)才配 eyes。
- 全都上最强模型,账单会比你想的难看。
十、结论
Scout 填的是"多模型分工 + 硬边界 + 逐步回放"这个组合的空白——Playwright 是执行层不讨论,browser-use 决策层但没按角色切模型。
不适合立即接入生产:0.1.x、无默认供应商、闭源部分藏得深。等 0.3+ 稳定版。
适合:动态站点、跨站点调研、跑挂要能定位的活。不适合:高频稳定路径、审计场景、CI 回归。
资料源
- Scout 仓库:https://github.com/outcrawlai/scout
- Scout 文档:https://outcrawl.ai/docs/scout
- browser-use:https://github.com/browser-use/browser-use
- Playwright MCP:https://playwright.dev/docs/mcp
- 数据截至 2026-10-22,逐条可查:GitHub API /repos/outcrawlai/scout、npm registry @outcrawl/scout、README 原文

