在传统爬虫或自动化测试的开发中,我们最头疼的莫过于网页频繁改版。某个元素的 class 变了,或者按钮位置调整了,之前精心编写的脚本可能瞬间崩溃。
如果转向完全依赖 AI Agent 呢?它有时又会在页面上“乱点一气”,其固有的“幻觉”问题甚至可能引发生产事故。
我们真正需要的,是一种兼具两者优势的中间方案:既有代码的精确执行力,又有 AI 的模糊理解力。
最近在 GitHub 上发现了一个名为 Stagehand 的开源工具,它恰恰遵循了这种 “人机协同” 的思路,为浏览器自动化开辟了一条新路径。它并没有试图用 AI 完全取代代码,而是将 AI 作为“智能的显式函数”来调用。这种范式,在当前乃至未来很长一段时间内,都显得尤为务实。

该项目在 GitHub 上已获得超过 20.8K 星标,受到了广大开发者的关注。

项目介绍
Stagehand 是一个采用“AI + 代码混合控制”理念的浏览器自动化框架。它的核心思想非常清晰:不是“要么全用 AI,要么全写代码”,而是 哪里确定就用代码,哪里不确定就交给 AI。
在这种设计下,你可以:
- 用 代码 精准控制你已完全理解的页面逻辑;
- 用 自然语言 指令,让 AI 去处理那些结构复杂、经常变动的页面部分;
- 上述两种方式可以 无缝混合使用。
在实际业务场景中,自动化脚本失败往往并非因为开发者的编码能力,而是源于页面的不确定性,例如:
- 页面结构过于复杂
- HTML 元素命名混乱
- DOM 结构频繁变动
- 不同用户权限下看到的页面内容不同
Stagehand 正是为了解决这些“不确定性问题”而生。
核心能力
Stagehand 将复杂的浏览器操作抽象为三个直观的 API 方法,覆盖了绝大部分自动化需求,其设计非常符合人类直觉。
1、page.act() - 智能动作执行
你不再需要与脆弱的选择器(如 CSS Selector、XPath)作斗争。
传统方式下,一旦元素的 ID 或类名改变,脚本就会失效:
// 传统方式:一旦 ID 变了就挂
await page.click('#login-btn-v2');
使用 Stagehand,你只需用自然语言描述你的意图:
// Stagehand:只要按钮还是“登录”功能,ID 怎么变都不怕
await page.act('Click the login button');
在底层,Stagehand 会捕获当前页面的 DOM 甚至视觉信息,通过大语言模型(LLM)分析出哪个元素最符合“登录按钮”的描述,然后调用底层 API(如 Playwright)执行点击。更重要的是,不同于纯 AI Agent,你可以预先审阅 AI 计划执行的操作,确认无误后再实际执行,这极大地减少了“AI 乱点”的风险。
这可能是对爬虫开发者而言最具吸引力的功能。它省去了编写复杂正则表达式和解析混乱 HTML 结构的繁琐工作。你只需定义一个期望的数据结构(Schema),AI 会自动从页面中提取并清洗数据。
// 定义你想要的数据结构
const schema = z.object({
productName: z.string(),
price: z.number(),
rating: z.number(),
});
// AI 自动从页面中提取并清洗数据
const data = await page.extract({
instruction: "Extract the main product details",
schema: schema,
});
无论页面使用 <table> 还是 <div> 布局,无论价格是用红色还是绿色显示,AI 都能理解语义并输出干净、结构化的 JSON 数据。
3、page.observe() - 观察与推理
这个方法允许你的脚本像人一样“观察”当前页面,并根据观察结果做出决策。你可以向 AI 提问,让它帮你分析和定位页面元素。
const elements = await page.observe("Find all links related to 'Help Center'");

为什么它比纯 AI Agent 更“可靠”?
Stagehand 在工程化方面的设计,使其比纯 AI 方案更为可靠,尤其体现在解决传统自动化的两大痛点:
- Self-Healing(自愈)机制:传统自动化最大的问题是“网页一改,脚本全挂”。Stagehand 内置了自愈能力。当因网站改版导致操作失败时,它能自动检测失败原因,重新调用 AI 寻找新的可行路径,修复后继续执行,从而解决“页面一改全崩”的老大难问题。
- 操作缓存(Action Caching):对于重复性操作,Stagehand 会自动缓存已验证成功的执行路径。第二次执行相同任务时直接复用缓存,不仅速度更快,稳定性也更高。
快速上手
开始使用 Stagehand 非常简单,只需一行命令:
npx create-browser-app
下面是一个快速的使用示例,展示了其核心 API 的调用方式:
// Stagehand's CDP engine provides an optimized, low level interface to the browser built for automation
const page = stagehand.context.pages()[0];
await page.goto("https://github.com/browserbase");
// Use act() to execute individual actions
await stagehand.act("click on the stagehand repo");
// Use agent() for multi-step tasks
const agent = stagehand.agent();
await agent.execute("Get to the latest PR");
// Use extract() to get structured data from the page
const { author, title } = await stagehand.extract(
"extract the author and title of the PR",
z.object({
author: z.string().describe("The username of the PR author"),
title: z.string().describe("The title of the PR"),
}),
);
更完整和详细的使用方法,可以参考其官方 技术文档(docs.stagehand.dev)。
适用人群
- 曾使用过 Playwright 或 Selenium,但苦于脚本高昂维护成本的开发者。
- 希望引入 AI 辅助,但又对纯 AI Agent 的稳定性心存顾虑的团队。
- 从事网络爬虫、RPA 或内部工具自动化的工程团队。
- 需要寻找一套能够“部署上线、长期稳定运行”的自动化解决方案的技术决策者。
总结
Stagehand 代表了当前浏览器自动化领域一个非常优雅的解决方案方向。它在开发效率(无需编写脆弱的选择器)和运行稳定性(具备缓存与自愈机制)之间找到了一个精妙的平衡点。
如果你的目标是让 “AI 为我兜底,而不是让它接管方向盘”,那么 Stagehand 绝对值得你深入了解。
项目 GitHub 地址:
https://github.com/browserbase/stagehand
