Stagehand v4 介绍:面向浏览器代理的 SDK。

Browserbase Blog ·

作者介绍了 Stagehand v4(一款面向浏览器代理的 SDK),并描述了其浏览器内状态管理、域策略执行以及供各语言 SDK 共享的核心。他们还报告了一次将批处理执行与 Playwright 进行对比的单次爬取,并解释了该测量的局限性。 阅读 4 条观点,查看支持证据与原始来源。

Miguel Gonzalez, Sean McGuire, Sam Finton, Harsehaj Dhami

理解这篇

4 个要点

综合解读

  1. 浏览器是页面状态的唯一真实来源

    浏览器是页面状态唯一真实可信的来源;维护本地状态镜像的自动化框架存在基于过期状态执行操作的风险,尤其在远程连接场景下更为显著。

    支持这项说法 1

    浏览器是唯一真正的真相来源。每一个交给你一个页面对象的框架,都在赌它能够保持一份本地副本足够准确、足够快,从而值得其可用性。这个赌注通常足够好。当它不够好时,你的脚本会作用于一个已经继续变化的页面,而你会得到一个描述已不存在的浏览器的错误。

    Miguel Gonzalez, Sean McGuire, Sam Finton, Harsehaj Dhami · 段落 4

    原始摘录
    The browser is the only real source of truth. Every framework that hands you a page object is betting that it can keep a local copy accurate and fast enough to be worth the usability. The bet is usually good enough . When it isn’t, your script acts on a page that has already moved on, and you get an error describing a browser that no longer exists.
    回到原文语境 →
  2. 域策略强制执行在浏览器内完成

    在 Stagehand v4 中,域策略强制执行逻辑运行于浏览器扩展内部,而非客户端侧,从而可在未经许可的弹出窗口加载前即实现真正意义上的拦截——彻底摒弃了 v3 版本中“先打开再关闭标签页”的临时变通方案。

    支持这项说法 1

    v4 版本将目标管理逻辑移入浏览器扩展内部。设定域策略后,其强制执行即在浏览器内完成,因此被阻止的弹出窗口将直接被拦截并显示拦截页面。此前的临时变通方案已被移除。

    Miguel Gonzalez, Sean McGuire, Sam Finton, Harsehaj Dhami · 段落 11

    原始摘录
    In v4, target management lives in the extension. You set your domain policy and the enforcement runs inside the browser, so a blocked pop-up gets blocked and shows a blocked page. We removed the workaround.
    回到原文语境 →

    继续探索

    安全架构 →
  3. 共享核心保障跨语言功能一致

    通过将状态管理(目标处理、帧跟踪、CDP 派发)迁移至浏览器扩展中,Stagehand v4 将各语言 SDK 简化为轻量级 RPC 客户端,从而支持 TypeScript、Python 和 Go 版本同步发布,并借助单一核心更新即可维持跨语言功能一致性。

    支持这项说法 1

    将实现逻辑移入扩展后,每个 SDK 都成为一个轻量级客户端,其调用跨越单一 RPC 边界。我们只需在核心实现中发布一次新功能,所有语言的 SDK 就能立即获得该功能——TypeScript、Python 和 Go 版本因此可同步上线,并在后续持续保持功能一致。

    Miguel Gonzalez, Sean McGuire, Sam Finton, Harsehaj Dhami · 段落 18

    原始摘录
    By putting it in the extension, each SDK becomes a thin client over one RPC boundary. We ship a feature to the core implementation once and every language has it immediately, which is what made launching TypeScript, Python, and Go together possible and what keeps them at parity afterward.
    回到原文语境 →

    继续探索

    SDK 架构 →
  4. 单次爬取中批处理更快,但数据不具备基准测试效力

    作者在一次针对 Wikipedia 的爬取实验中执行了 50 个操作:批处理执行耗时 14,221.7 毫秒,Playwright 耗时 22,650.3 毫秒,前者快 1.59 倍;两者均成功完成全部 50 个操作。作者强调,该数据仅来自单一客户端对单一路径的一次运行,不构成正式基准测试。

    支持这项说法 1

    我们测量了一次包含 50 项操作的维基百科爬取。批处理在 14,221.7ms 内完成,而 Playwright 为 22,650.3ms,两者均完成了 50 项操作中的全部 50 项。换算下来即每秒 3.52 项操作对比 2.21 项,相差 1.59 倍,外层批处理调用的开销为 44.0ms。

    Miguel Gonzalez, Sean McGuire, Sam Finton, Harsehaj Dhami · 段落 38

    原始摘录
    We measured one 50-action Wikipedia crawl. Batch finished in 14,221.7ms against Playwright's 22,650.3ms, and both completed 50 of 50 actions. That works out to 3.52 actions per second versus 2.21, a 1.59x difference, with 44.0ms of overhead for the outer batch call.
    回到原文语境 →

关键段落4

带明确归属与语境的原文片段。打开原始文本核查出处。

安全架构

域策略强制执行在浏览器内完成

v4 版本将目标管理逻辑移入浏览器扩展内部。设定域策略后,其强制执行即在浏览器内完成,因此被阻止的弹出窗口将直接被拦截并显示拦截页面。此前的临时变通方案已被移除。

原始摘录
In v4, target management lives in the extension. You set your domain policy and the enforcement runs inside the browser, so a blocked pop-up gets blocked and shows a blocked page. We removed the workaround.
浏览器自动化状态一致性

浏览器是页面状态的唯一真实来源

浏览器是唯一真正的真相来源。每一个交给你一个页面对象的框架,都在赌它能够保持一份本地副本足够准确、足够快,从而值得其可用性。这个赌注通常足够好。当它不够好时,你的脚本会作用于一个已经继续变化的页面,而你会得到一个描述已不存在的浏览器的错误。

原始摘录
The browser is the only real source of truth. Every framework that hands you a page object is betting that it can keep a local copy accurate and fast enough to be worth the usability. The bet is usually good enough . When it isn’t, your script acts on a page that has already moved on, and you get an error describing a browser that no longer exists.
性能基准测试

单次爬取中批处理更快,但数据不具备基准测试效力

我们测量了一次包含 50 项操作的维基百科爬取。批处理在 14,221.7ms 内完成,而 Playwright 为 22,650.3ms,两者均完成了 50 项操作中的全部 50 项。换算下来即每秒 3.52 项操作对比 2.21 项,相差 1.59 倍,外层批处理调用的开销为 44.0ms。

原始摘录
We measured one 50-action Wikipedia crawl. Batch finished in 14,221.7ms against Playwright's 22,650.3ms, and both completed 50 of 50 actions. That works out to 3.52 actions per second versus 2.21, a 1.59x difference, with 44.0ms of overhead for the outer batch call.
SDK 架构

共享核心保障跨语言功能一致

将实现逻辑移入扩展后,每个 SDK 都成为一个轻量级客户端,其调用跨越单一 RPC 边界。我们只需在核心实现中发布一次新功能,所有语言的 SDK 就能立即获得该功能——TypeScript、Python 和 Go 版本因此可同步上线,并在后续持续保持功能一致。

原始摘录
By putting it in the extension, each SDK becomes a thin client over one RPC boundary. We ship a feature to the core implementation once and every language has it immediately, which is what made launching TypeScript, Python, and Go together possible and what keeps them at parity afterward.

来源与研究方法

这些观点均关联原始来源。转述已明确标注,不作为逐字原话展示。

打开转录或来源材料 (在新标签页中打开)报告问题

继续研究相关话题

以下资料涉及本文的话题;讨论相同话题不代表观点一致。