Stagehand v3多语言SDK:Python/Go/Rust/Java下的浏览器自动化统一方案
引言:浏览器自动化的“巴别塔”之困
2026年,AI Agent正在以前所未有的速度接管浏览器操作——从自动化测试、数据采集到AI驱动的网页交互,浏览器自动化已成为AI工程化的核心能力之一。但一个长期困扰开发者的问题是:每种语言都有自己的浏览器自动化库,切换语言意味着重学一套API、重写一遍逻辑。TypeScript开发者用Playwright,Python开发者用Selenium,Go开发者用chromedp——工具链的割裂导致了知识无法复用、团队协作困难。
2026年初,Browserbase发布了Stagehand v3。这不是一次简单的版本迭代,而是一次彻底的架构重构:Stagehand v3放弃了Playwright依赖,直接通过Chrome DevTools Protocol与浏览器通信,同时通过OpenAPI规范和代码生成器,为Python、Go、Rust、Java等语言提供了一致的SDK。
一、为什么需要多语言SDK?
1.1 浏览器自动化的“语言孤岛”
在Stagehand v3之前,浏览器自动化的生态是高度割裂的:TypeScript/JavaScript有Playwright和Puppeteer,Python有Selenium和Playwright Python,Go有chromedp和go-rod,Java有Selenium WebDriver,Rust有headless_chrome。每种语言的API风格各不相同,学习成本高,代码无法复用。
对于需要在多种语言间切换的团队,或者需要在非JavaScript生态中集成浏览器自动化的场景,这种割裂带来了巨大的工程负担。正如Browserbase团队所说:“开发者用PHP、Rust、C#、Kotlin等语言时,仍然被困在21世纪初的手写选择器方法里”。
1.2 Stagehand的设计哲学
Stagehand团队给出的答案是**“一次实现,处处运行”**。通过两层架构实现多语言统一:
Stagehand v3的多语言SDK覆盖了TypeScript、Python、Go、Java、Ruby、Rust、PHP、C#、Kotlin,并提供了REST API供直接调用。
Stagehand v3的多语言SDK覆盖了Python、Go、Java、Kotlin、Ruby、C#和PHP,Rust SDK独立开发。所有语言SDK共享相同的核心API设计,确保开发者切换语言时无需重新学习。
二、核心架构:从Playwright依赖到CDP原生
2.1 为什么放弃Playwright?
Stagehand v2基于Playwright构建,但团队在迭代中发现了一个根本问题:Playwright的设计目标是自动化测试——它的自动等待和可操作性检查在测试场景中很有用,但当Stagehand的真正任务是向模型流式传输可访问性树和DOM快照时,这些额外检查反而成了开销。此外,Playwright的某些优化策略与AI驱动的浏览器操作需求并不匹配。
Stagehand v3的解决方式是绕过Playwright,直接通过Chrome DevTools Protocol与浏览器通信。这意味着Stagehand不再依赖Playwright的抽象层,而是直接控制浏览器。这一决策带来的直接收益是:Stagehand可以更快地适配新的CDP特性,同时避免了Playwright带来的额外资源消耗和隐蔽的验证码触发风险。
2.2 多语言SDK的生成机制
Stagehand v3的多语言SDK能力建立在OpenAPI规范的基础上。核心库的API通过OpenAPI 3.1规范描述,然后使用代码生成工具为各语言生成对应的SDK客户端。
这种“规范驱动”的SDK生成方式确保了各语言SDK的行为一致性。Go SDK的版本已更新至v0.17.1,Java SDK更新至0.6.1,Ruby SDK更新至0.6.2,持续的版本迭代保证了SDK的稳定性和功能完整性。
三、原语设计:AI驱动的浏览器操作
Stagehand v3定义了四个核心原语,它们是所有语言SDK的公共API基础。
3.1 Act:执行动作
act是最基本的操作原语,用于执行网页上的动作。与Selenium需要精确定位元素不同,act接收自然语言指令,由AI自动理解意图并完成操作。当网站DOM结构发生变化时,act的AI驱动特性能够自动适应变化,无需重写代码。
// 点击登录按钮
await stagehand.act("点击页面上的登录按钮");
// 填写表单
await stagehand.act("在搜索框中输入'浏览器自动化'并按下回车");
在Python SDK中,API保持完全一致,使用AsyncStagehand实现异步调用。
3.2 Extract:提取结构化数据
extract用于从页面中提取结构化数据,结合Zod Schema确保类型安全。开发者定义数据模型,AI自动从页面中提取符合模型的数据。
import { z } from "zod";
const productSchema = z.object({
name: z.string(),
price: z.number(),
description: z.string().optional()
});
const products = await stagehand.extract(
"提取所有商品信息",
z.array(productSchema)
);
3.3 Observe:观察可用动作
observe用于发现当前页面上可执行的动作,返回候选动作列表,便于开发者选择执行。
3.4 Agent:自主多步工作流
agent是最强大的原语,用于执行复杂的多步骤工作流。Agent会自主规划执行路径,在遇到动态变化时自适应调整。
const agent = stagehand.agent({
model: "google/gemini-2.5-computer-use-preview-10-2025",
systemPrompt: "你是帮助用户完成表单填写的助手。",
mode: "hybrid"
});
const result = await agent.execute({
instruction: "完成整个注册流程,包括填写表单和邮箱验证",
maxSteps: 20
});
Stagehand v3的Agent配置支持为工具执行配置独立的模型——主推理模型使用高能力模型,工具执行使用更快、更便宜的模型,通过executionModel参数实现。
四、多语言实战:各语言SDK示例
4.1 Python SDK
import asyncio
from stagehand import AsyncStagehand
async def main():
stagehand = AsyncStagehand(
env="LOCAL",
model="openai/gpt-5"
)
await stagehand.init()
# 使用act执行动作
await stagehand.act("点击登录按钮")
# 使用extract提取数据
data = await stagehand.extract(
"提取商品名称和价格"
)
await stagehand.close()
asyncio.run(main())
Python SDK推荐使用AsyncStagehand进行异步调用,利用aiohttp提升并发性能,并支持Server-Sent Events流式响应。
4.2 Go SDK
package main
import (
"context"
"fmt"
"github.com/browserbase/stagehand-go"
)
func main() {
client := stagehand.NewClient(stagehand.Config{
Env: "LOCAL",
Model: "openai/gpt-5",
})
ctx := context.Background()
defer client.Close()
err := client.Act(ctx, "点击页面上的注册按钮")
if err != nil {
panic(err)
}
var products []struct {
Name string `json:"name"`
Price float64 `json:"price"`
}
err = client.Extract(ctx, "提取所有商品信息", &products)
fmt.Printf("找到 %d 个商品\\n", len(products))
}
Go SDK版本已更新至v0.17.1,支持本地模式和Browserbase云模式。
4.3 Java SDK
import com.browserbase.stagehand.Stagehand;
import java.util.List;
Stagehand stagehand = Stagehand.builder()
.env("LOCAL")
.model("openai/gpt-5")
.build();
stagehand.act("点击登录按钮");
List<Product> products = stagehand.extract(
"提取所有商品信息"
);
stagehand.close();
Java SDK版本更新至0.6.1,API设计与其他语言保持一致。
4.4 Rust SDK
Rust SDK目前仍处于Beta阶段,独立开发(不基于OpenAPI生成),但API设计与其他语言保持一致。
use stagehand::{Stagehand, Config};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let stagehand = Stagehand::new(Config {
env: "LOCAL".to_string(),
model: "openai/gpt-5".to_string(),
})?;
stagehand.act("点击登录按钮").await?;
stagehand.close().await?;
Ok(())
}
五、多浏览器驱动支持
Stagehand v3的另一个关键特性是浏览器驱动无关:它支持与Playwright、Puppeteer、Selenium等现有浏览器驱动库协同工作,在同一浏览器会话中同时使用多个工具。
5.1 与Playwright协同
import { Stagehand } from "@browserbasehq/stagehand";
import { chromium } from "playwright-core";
const stagehand = new Stagehand({ env: "LOCAL", model: "openai/gpt-5" });
await stagehand.init();
// 通过CDP连接Playwright
const browser = await chromium.connectOverCDP({
wsEndpoint: stagehand.connectURL()
});
const pwPage = browser.contexts()[0].pages()[0];
await pwPage.goto("https://example.com");
// Stagehand方法接收Playwright页面对象
await stagehand.act("点击登录按钮", { page: pwPage });
5.2 与Puppeteer协同
import puppeteer from "puppeteer-core";
const browser = await puppeteer.connect({
browserWSEndpoint: stagehand.connectURL(),
defaultViewport: null,
});
const ppPage = (await browser.pages())[0];
await stagehand.act("点击登录按钮", { page: ppPage });
5.3 与Selenium协同(Browserbase云)
Selenium集成需要Browserbase云服务支持,通过共享会话让两个工具同时操作同一浏览器实例。
const stagehand = new Stagehand({
env: "BROWSERBASE",
browserbaseSessionID: session.id,
model: "openai/gpt-5"
});
const driver = new Builder()
.forBrowser("chrome")
.usingServer(session.seleniumRemoteUrl)
.build();
这种集成模式让开发者可以结合两种工具的优势:用Stagehand的AI能力处理复杂交互,用传统驱动库的精确选择器处理确定性操作。
六、云服务集成与成本优化
Stagehand v3在Browserbase云环境中运行时可利用多项优化能力:
- 行动缓存:act()、extract()、observe()的重复调用可立即返回结果,不消耗LLM Token
- 会话持久化:浏览器会话在close()调用后可继续保持运行
- CAPTCHA自动解决:由Browserbase云基础设施自动处理验证码挑战
在本地环境中,Stagehand可缓存行动观测结果到指定目录,同样能减少重复调用的Token消耗。
七、总结
Stagehand v3通过三件事重新定义了浏览器自动化的范式:
Stagehand v3的核心价值在于将AI驱动的浏览器操作能力,以统一接口的形式推向了每一种主流编程语言。对于需要在多语言环境中进行浏览器自动化的团队而言,这套机制在不增加学习成本的前提下,确保了浏览器自动化能力的可移植性和可维护性。


