Stagehand 是什么?25.5K 星的 AI 浏览器 Agent SDK,脚本给精度、Agent 给灵活(基础篇)

Stagehand 是什么?25.5K 星的 AI 浏览器 Agent SDK,脚本给精度、Agent 给灵活(基础篇)

写自动化脚本,最烦的不是逻辑,是选择器。上个月还能跑的 #submit-btn,这月前端改版就变成 #submit-2f8a;Selenium 老老实实写了两个月的 XPath,一夜之间全成废纸。AI Agent 火起来之后,很多人第一反应是”让模型截图自己看”,结果更贵、更慢、更不稳。

浏览器里到底缺一个什么东西?我在 ai.godsun.pro 上写过 browser-use 那期,今天要说的是另一个思路完全不同的选手:Stagehand,Browserbase 做的 AI 浏览器 Agent SDK,目前 25.5K 星,MIT 协议,最后一次提交就在今天(10 月 2 日)。

它到底解决什么

先说清定位。Playwright 和 Selenium 是为测试设计的——脚本是死的,页面是活的,所以选择器一改就崩。OpenAI Operator 那类全自动 Agent 是反过来——把控制权全交给黑盒模型,但你就没法预测它下一步干嘛,出错了也不知道是哪一步错的。

Stagehand 卡在中间,卖点就一句话:脚本给精度,Agent 给灵活。

它把浏览器操作拆成四个原语,都是一句自然语言:

原语 干的事 长什么样
act() 执行一个动作 act("点击加入购物车")
observe() 先看看页面上有什么 observe("找邮箱输入框")
extract() 按 schema 抽结构化数据 extract("提取表格里的发票", Invoices)
agent() 多步骤自主流程 agent.execute("投这个简历")

关键细节是 observe() 会返回真实的选择器,然后你可以把 Action 对象直接喂回 act() 重放——这一步零推理、零 token、不花钱。官方的例子里,用户名密码就是靠这个绕开模型的:让模型只负责”找到那个框”,密码本身从环境变量读,直接 fill() 进去,从来不经过大模型。

再就是 selfHeal。脚本跑通过之后,网站改版了、选择器失效了,打开 selfHeal,act() 会自动重新推理一遍这个动作该怎么做。这就是它比纯 Playwright 多出来的那条命。

上手有多快

三行装完(本地跑需要自己装 Chrome):

pip install stagehand          # Python
pnpm add @browserbasehq/stagehand 'zod@~4.4.3'   # TypeScript
go get github.com/browserbase/stagehand/packages/sdk-go/[email protected]   # Go

Python 抓一张发票表的完整代码,贴在这儿:

import asyncio, os
from pydantic import BaseModel
from stagehand import Stagehand, local_browser

class Invoice(BaseModel):
    number: str
    amount: float
    paid: bool

class Invoices(BaseModel):
    invoices: list[Invoice]

async def main():
    # cookie 存在 ./browser-data,下次跑已经是登录态
    browser = await local_browser.launch(user_data_dir="./browser-data")
    stagehand = await Stagehand.create(
        browser=browser,
        model="openai/gpt-5.4-mini",
        model_api_key=os.environ["OPENAI_API_KEY"],
    )
    page = (await browser.context.pages())[0]
    await page.goto("https://app.example.com/billing")

    result = await stagehand.extract("提取表格里的每一张发票", Invoices)
    print(result.data.invoices)

asyncio.run(main())

注意 model="openai/gpt-5.4-mini" 这种写法——Stagehand 现在用的是 LiteLLM 风格的 provider/model 字符串,换模型就是换个字符串,不是改代码结构。本地模型同理,Ollama 拉起来的 Qwen 也能接。

想接自己那套 Agent 框架也有现成集成:CrewAI、Mastra、Deep Agents、Vercel AI SDK、Claude Code、Codex 都列在官方集成文档里。再懒一点,Browserbase 官方托管了一个 MCP server,一行配置就能给任意 MCP 客户端装上 navigate / act / observe / extract,连本地浏览器都不用装。

花钱的地方得说清楚

Stagehand 本体 MIT 开源,代码随便看随便改。但它背后的 Browserbase 是云服务——Stagehand 跑在 Browserbase 上官方说比等价的 Playwright 云浏览器快 2 倍,还能开 cache: true 让重复动作直接从服务器缓存返回、不花 token。代价是你把浏览器托管出去了。

商业上,Browserbase 是 2024 年 Paul Klein IV 一个人在旧金山开的公司,B 轮 4000 万美元、投后估值 3 亿,领投 Notable Capital,跟投 CRV 和 Kleiner Perkins,加上前面的钱一共融了 6750 万美元。同一轮还发了 Director——一个给不会写代码的人用自然语言拼浏览器工作流的无代码工具。用它家的客户包括 Perplexity、Vercel、Stripe、Shopify、Uber。

Stagehand 主仓已经进 v4,npm 上 latest 是 4.1.0,Python 那边同步 4.1.0(要求 Python ≥ 3.11),v3-latest 停在 3.7.3 还在慢慢修补丁。作者贡献者名单里 Paul Klein 自己排第一个。25K 星里很大一部分是被 Claude Code 和 Codex 用户带进来的——你让编码 Agent 去装浏览器,它大概率推荐这个。

几句话实话

第一,Stagehand 不是让你省钱的,是让你少返工的。 每个 act() 调一次模型就是一次推理,多步骤任务跑几十次,token 消耗比纯 Playwright 高一个量级是正常的。但配上 cache: true 和 observe() 预热,把常见路径缓存下来之后,第二次以后的成本能压到很低。真正的价值在”网站改版了不用重写”。

第二,v4 变化挺大,别照着老博客抄。 主仓 README 已经是 v4 的写法(localBrowser.launch、zod/v4、@browserbasehq/stagehand 新包名),v3-latest 标签还在 3.7.3 挂着。GitHub 上和 CSDN 上大量 Stagehand 教程还停在 @browserbase/stagehand + v3 的 API,照抄会报一堆错。

第三,act() 别写多步骤指令。 官方文档专门用红绿对比写死了这一条:多步骤指令不可靠,act() 在 v4 里也不再递归循环了,要么拆成一串单步 act(),要么上 agent()。这是新手最容易踩的坑。

第四,本地 Chrome 是硬依赖。 pip install 完事不代表能跑,你得自己装 Chrome,Windows 另有一套装法。CI 环境里还得处理浏览器沙箱那些老问题。

第五,别指望它爬反爬。 这是给”操作你自己有权操作的网站”设计的。真碰上要绕验证码、指纹检测的活儿,那是 Steel、Browserbase 住宅代理那一档的生意,价格另算。

顺带一句,前面提到的 agent-browser 那种命令行浏览器工具,和 Stagehand 是两类东西:前者管的是Agent 怎么在终端里动鼠标,后者管的是自动化脚本怎么在生产环境活下来。工具链上经常两个都要。


by 数码罗记 · godsun.pro

如果你也在折腾 Agent,站内还有 n8n 自动化平台 和 Skyvern 浏览器自动化 这两期,方向不同可以对着看。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注