Stagehand:AI 与代码混控的浏览器自动化,网页改版不再让脚本全崩
以前写爬虫或自动化测试,最怕网页改版。一个 div 的class变了,或者按钮换了个位置,脚本直接报错。
用纯 AI Agent 吧,它有时候又会在页面上乱点,甚至幻觉就很可能导致生产事故。。
我们需要的是中间派:既有代码的精确执行力,又有 AI 的模糊理解力。
最近在 GitHub 上刷到一个叫Stagehand的开源工具,恰恰是走了一条**“人机协同”**的中间路线。这才是浏览器自动化该有的形态。
目前在 GitHub 上已突破 20K+ Star,深受广大自动化测试人员的青睐。
它没有试图用 AI 取代所有代码,而是把 AI 当作一个“智能的显式函数”来调用。这可能是目前也是未来很长一段时间内,最靠谱的自动化开发范式。
项目介绍
Stagehand是一个“AI + 代码混合控制”的浏览器自动化框架。
你可以:
• 用代码精准控制你已经理解的页面;
• 用自然语言交给 AI 处理你不熟悉、变化快的页面;
• 两种方式无缝混用。
不是“要么 AI,要么代码”,而是(核心理念):
哪里确定用代码,哪里不确定交给 AI。
这是 Stagehand 最聪明的一点。
在真实业务里,自动化失败往往不是因为你不会写代码,而是因为:
• 页面结构复杂
• 元素命名混乱
• DOM 经常变化
• 不同账号看到的页面不一样
这些,本质上是 “不确定性问题”。
所以才有了 Stagehand 的这种核心思路。
核心能力
Stagehand 把复杂的浏览器操作简化为三个极其直观的方法,这种 API 设计非常符合人类直觉。而这三个核心能力,刚好可覆盖 90% 的自动化需求。
1、page.act()- 动作执行
你不再需要写选择器。
以前我们要写:
// 传统方式:一旦 ID 变了就挂
await page.click('#login-btn-v2');
现在用 Stagehand:
// Stagehand:只要按钮还是“登录”,ID 怎么变都不怕
await page.act('Click the login button');
在底层,Stagehand 会截取当前页面的 DOM 快照(甚至视觉信息),通过 LLM 分析出哪个元素最符合“登录按钮”的描述,然后调用 Playwright 的底层 API 去点击它。
但不同于纯 Agent,你可以先预览 AI 将要执行的动作,确认没问题再执行。
这一步就已经解决了很多“AI 乱点”的问题。
2、page.extract()- 数据提取
这是爬虫神技,是我觉得最杀手级的功能。
写爬虫最烦的是什么?是写正则,是解析那乱七八糟的 HTML 结构。Stagehand 允许你定义一个 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()- 观察与推理
允许脚本“看”一眼当前页面,然后决定下一步做什么。
observe 允许你问 AI 问题:
const elements = await page.observe("Find all links related to 'Help Center'");
这是很多人容易忽略、但极其实用的一点。
为什么说它比纯 AI 更“聪明”?
这是 Stagehand 工程味最重的一点。
传统自动化最大的问题是:网页一改,脚本全挂。
Stagehand 内置Self-Healing(自愈)机制:
当网站改版导致自动化失败时,Stagehand 会自动检测失败原因、重新调用 AI 找到新路径
、修复后继续执行。
这一步,直接解决了传统自动化“页面一改全崩”的老大难问题。
还有就是操作缓存(Action Caching),对重复操作进行自动缓存,第二次执行直接复用已验证路径,既快又稳定。
快速入手
只需一行代码即可开始使用 Stagehand。
npx create-browser-app
使用示例:
// 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 辅助,但不敢把稳定性交给 Agent 的人
• 做爬虫/RPA/内部自动化工具的工程团队
• 需要“能上线、能长期跑”的自动化方案
写在最后
Stagehand 是目前浏览器自动化领域最优雅的解决方案之一。
它完美平衡了开发效率(不用写选择器)和运行成本(有缓存机制)。
如果你追求的是:“AI 帮我兜底,而不是接管方向盘。”
那 Stagehand,值得你认真看一眼。
GitHub: