Stagehand:用自然语言实现浏览器自动化的AI框架

为什么传统浏览器自动化工具总让人头疼?

当我们谈论浏览器自动化时,开发者通常面临两个极端选择:要么使用像Selenium、Playwright这样的底层框架编写大量精细代码,要么依赖不可预测的高级AI代理。前者需要精确的DOM操作知识,后者则难以控制执行结果。这种两难选择正是Stagehand要解决的核心问题。

Stagehand的突破性解决方案

Stagehand是首个允许开发者自由选择编码与自然语言指令比例的浏览器自动化框架。它完美融合了Playwright的精准控制与AI的自然语言理解能力:

# 用自然语言点击按钮
await stagehand.page.act("点击'快速入门'按钮")

# 用Playwright精确控制
await page.locator("button.quickstart").click()

这种混合模式意味着:

  • 面对陌生页面时,用自然语言快速探索
  • 需要精准操作时,随时切换到代码控制
  • 所有操作可预览、可缓存、可复用

四大核心功能解析

1. act:自然语言执行浏览器操作

# 单条指令操作
await stagehand.page.act("滚动到页面底部")

# 多条指令批量执行
await stagehand.page.act([
    "在搜索框输入'AI自动化'",
    "点击搜索按钮",
    "等待结果加载完成"
])

实际应用场景:

  • 自动填写网页表单
  • 执行多步骤导航流程
  • 处理动态加载内容

2. extract:结构化数据提取

结合Pydantic模型,精准提取所需信息:

class Product(BaseModel):
    name: str = Field(..., description="产品名称")
    price: float = Field(..., description="产品价格")

# 提取页面数据
products = await page.extract(
    "提取前5个产品信息",
    schema=Product
)

优势特性:

  • 自动验证数据结构
  • 支持复杂嵌套模型
  • 直接输出Python对象

3. observe:页面元素智能识别

# 获取元素描述
element_info = await page.observe("找到登录按钮")

# 输出示例
{
    "description": "蓝色登录按钮",
    "selector": "button.login-btn",
    "method": "click"
}

核心价值:

  • 预览AI建议操作
  • 获取精准CSS选择器
  • 理解页面元素关系

4. agent:自主多步骤任务执行

# 复杂任务自动化
await stagehand.agent.execute(
    "预订马尔代夫双人游,选择五星级酒店"
)

技术亮点:

  • 支持OpenAI/Anthropic等模型
  • 自动分解多步骤任务
  • 错误自我修复机制

实战安装指南

基础环境配置

# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate

# 安装Stagehand
pip install stagehand

完整工作流示例

import os
from stagehand import Stagehand

async def main():
    config = {
        "env": "BROWSERBASE",
        "api_key": os.getenv("BROWSERBASE_API_KEY"),
        "model_name": "google/gemini-flash"
    }
    
    stagehand = Stagehand(config)
    await stagehand.init()
    
    try:
        page = stagehand.page
        await page.goto("https://example.com")
        
        # 混合使用自然语言和代码
        await page.act("点击导航栏的'产品'选项卡")
        await page.wait_for_selector(".product-list")
        
        # 提取结构化数据
        products = await page.extract("所有产品名称和价格")
        print(f"获取到{len(products)}条产品信息")
        
    finally:
        await stagehand.close()

高级技巧:操作缓存与自我修复

操作预检模式

# 1. 预览操作建议
action_preview = await page.observe("点击联系我们链接")

# 2. 人工确认后执行
if validate_action(action_preview):
    await page.act(action_preview)

自动修复机制

当页面结构变化时:

  1. Stagehand检测操作失败
  2. 自动重新分析页面结构
  3. 更新操作策略
  4. 继续执行任务

技术架构解析

Stagehand的三层架构设计:

  1. 交互层:自然语言指令解析
  2. 执行层:Playwright操作引擎
  3. 认知层:AI模型决策系统

[object Promise]

企业级应用场景

电商领域

  • 竞品价格监控
  • 自动下单系统
  • 商品信息抓取

金融领域

  • 财报数据提取
  • 交易流程自动化
  • 风险评估模拟

研发领域

  • 跨浏览器测试
  • 用户行为模拟
  • 性能监控脚本

常见问题解答

Stagehand适合什么复杂度任务?

从简单按钮点击到多步骤工作流都能处理,建议10步以内操作使用agent,复杂流程拆解为多个act/extract组合

如何保证操作稳定性?

  1. 使用observe预检操作
  2. 启用self_heal参数
  3. 关键步骤添加手动校验点

支持哪些浏览器环境?

完整支持Chromium/Firefox/WebKit内核,可在本地或BrowserBase云环境运行

处理动态加载内容的技巧

# 显式等待元素出现
await page.act("点击加载更多按钮")
await page.wait_for_selector(".new-content", timeout=5000)

开发者生态与未来路线

Stagehand正积极构建开源社区:

  • GitHub问题跟踪
  • Slack技术交流群
  • 贡献者奖励计划

近期开发重点:

  1. 操作历史回放功能
  2. 视觉定位增强
  3. 多语言指令支持

开始你的自动化之旅

Stagehand代表了浏览器自动化的新范式:

  • 自由切换编码与自然语言 ✓
  • 操作可预览可缓存 ✓
  • 企业级稳定性保障 ✓
# 最简单的启动脚本
from stagehand import Stagehand

async def main():
    async with Stagehand() as stagehand:
        await stagehand.page.goto("https://your-site.com")
        await stagehand.page.act("开始探索之旅")

立即体验技术革命:

pip install stagehand

项目地址:https://github.com/browserbase/stagehand
文档中心:https://docs.stagehand.dev
技术交流:https://stagehand.dev/slack