
以前写爬虫或自动化测试,最怕网页改版。一个 div 的 class 变了,或者按钮换了个位置,脚本直接报错。
用纯 AI Agent 吧,它有时候又会在页面上乱点,甚至幻觉就很可能导致生产事故。。
我们需要的是中间派:既有代码的精确执行力,又有 AI 的模糊理解力。
最近在 GitHub 上刷到一个叫 Stagehand 的开源工具,恰恰是走了一条 “人机协同” 的中间路线。这才是浏览器自动化该有的形态。

目前在 GitHub 上已突破 20K+ Star,深受广大自动化测试人员的青睐。

它没有试图用 AI 取代所有代码,而是把 AI 当作一个“智能的显式函数”来调用。这可能是目前也是未来很长一段时间内,最靠谱的自动化开发范式。
Stagehand 是一个“AI + 代码混合控制”的浏览器自动化框架。

你可以:
不是“要么 AI,要么代码”,而是(核心理念):
哪里确定用代码,哪里不确定交给 AI。
这是 Stagehand 最聪明的一点。
在真实业务里,自动化失败往往不是因为你不会写代码,而是因为:
这些,本质上是 “不确定性问题”。
所以才有了 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'");这是很多人容易忽略、但极其实用的一点。
这是 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。
Stagehand 是目前浏览器自动化领域最优雅的解决方案之一。
它完美平衡了开发效率(不用写选择器)和运行成本(有缓存机制)。
如果你追求的是:“AI 帮我兜底,而不是接管方向盘。”
那 Stagehand,值得你认真看一眼。
GitHub:
https://github.com/browserbase/stagehand

如果本文对您有帮助,也请帮忙点个 赞👍 + 在看 哈!❤️
在看你就赞赞我!
