PuppyIP 资源中心
开发接入 6 分钟 发布于 2026-10-13

Cloudflare持久浏览器来了:登录能保留,但默认空闲仅10分钟

代理可以打开报表,下一回合继续使用原来的标签页和登录。Cloudflare新browserTool保留的是仍存活的浏览器会话:默认空闲10分钟,过期或崩溃后会换新浏览器。接入时先设计用户隔离和重启分支,再决定怎样让人完成登录。

Cloudflare Agents browserTool Browser Run 登录会话 开发者指南

服务对象与地域限制

PuppyIP 仅面向海外合规企业及其授权人员提供服务,不面向中国大陆地区开放或提供代理服务。本服务仅限用于中国大陆境外的合法业务活动,严禁在中国大陆境内使用本服务。

代理 IP 或服务器位于境外,不改变上述限制。不得通过中转、转接、共享或转售向中国大陆境内的最终使用者提供本服务。使用前请阅读用户服务协议。

本文要点

  • 需要Agents SDK 0.28.0或更高版本;当前持久浏览器支持Browser Run的Chromium,通过CDP操作。
  • Pi默认每个对话有自己的活动标签页,但同一Browser内仍共享Cookie和登录;分标签页不等于分账号。
  • Durable Object休眠后可以重连仍存活的浏览器;restarted: true表示旧标签页与登录已丢失,不是已经恢复。
  • 人工接管应放在两个回合之间;Live View链接可控制浏览器,只交给可信、已认证用户。
  • Browser Run免费额度是每天10分钟,与会话默认空闲10分钟不同;CDP会话还按并发浏览器计费。

这次保留什么,什么时候会丢?

Cloudflare在10月13日宣布Agents SDK新增browserTool。模型写代码,通过Chrome DevTools Protocol(CDP,浏览器控制接口)打开网页、读取页面或操作标签页;后续回合可以继续使用同一Browser Run浏览器。

浏览器运行在Durable Object之外。对象保存会话标识,休眠后可重连仍存活的浏览器,标签页、Cookie和登录因此能跨回合保留。默认空闲时长为10分钟,可在browserRun(binding, options)配置keepAliveMs;这不是把登录永久写入持久存储。

会话过期、关闭或崩溃后,下次调用会创建新浏览器。返回的restarted: true表示原状态已丢失;先重新确认页面与登录,再继续任务。公告没有给出逐地区开放清单或准确上线时刻,也不能证明某个账号已经接入成功。

用Pi接入,先把绑定与生命周期配齐

第一步,在自己的开发项目核对agents至少为0.28.0,并按官方Pi Durable示例准备@cloudflare/codemode、@earendil-works/pi-durable和@earendil-works/pi-ai。当前持久浏览器使用Browser Run的Chromium,不能按这份示例推定Firefox、WebKit或其他CDP服务也可用。

第二步,配置Browser Run的BROWSER、Worker Loader的LOADER、Durable Object与模型绑定。Pi示例使用Workers AI的AI绑定、SQLite类迁移和nodejs_compat,并要求compatibility_date用当前日期。导出agents/browser的CodemodeRuntime;LOADER负责在沙箱中运行模型生成的浏览器代码。

第三步,从agents/browser创建Browser与browserRun,从agents/browser/pi导入browserTool。在Harness.open()之前把工具注册进Pi扩展的tools数组,并用Lifecycle.install(this).use(this.browser).use(this.harness)管理两者。完整配置和代码见官方来源;本文没有安装SDK、部署Worker或执行浏览器任务。

每个对话一个标签页,不等于每个用户一个登录

Pi默认为每个对话保存自己的活动标签页;同一Browser中的对话、fork和子代理仍共享Cookie与登录。scope区分活动标签页,不是独立浏览器profile。用户需要独立登录时,应使用独立Browser,不能只换conversationId。

AI SDK从agents/browser/ai-sdk导入browserTool,放进generateText或streamText的tools对象;TanStack AI从agents/browser/tanstack-ai导入,放进chat的tools数组。两者省略scope时共享一个活动标签页,需要时显式传对话标识;即使分了scope,Cookie仍共享。

假设两个员工操作不同工作账号,这是未执行的设计场景。只给两人分标签页,会让登录状态仍留在同一浏览器。先按已认证用户或工作区选择对象名,并按账号隔离要求分Browser;不要照搬官方演示中所有请求共用的demo对象名。

遇到登录或验证码,在回合之间交给人

应用调用browser.liveView()取得同一浏览器的接管链接,让人处理登录、多因素认证、CAPTCHA或敏感输入。它列出Browser内所有scope的标签页;没有活动浏览器、已关闭或已过期时返回undefined,不会替你启动新浏览器。

browserTool不会在一次运行中暂停等待人工操作。先让模型到达需要帮助的页面并结束该回合,应用把Live View交给用户;用户完成操作后,下一回合再继续。完成登录不等于已经批准后续购买、删除或其他业务动作。

Live View链接是持有即可使用的控制凭据,只展示给可信、已认证用户,不交给模型,也不存进日志。链接用于建立连接的有效期约5分钟;需要时重新调用liveView()取得新链接。这与浏览器空闲10分钟是不同计时。

中断后先查结果,别直接重放点击

Pi不会自动重放因对象被回收而中断的浏览器调用,因为重放可能让表单提交或按钮点击执行两次。模型会收到interrupted结果,再决定下一步。先检查目标页面与必要的业务结果,而不是直接把原调用再发一次。

停止对话也不会取消已经在运行的浏览器调用;它会完成或达到timeoutMs,默认60秒。因此停止等待、调用结束和操作成功要分别确认,不能看聊天停止就认定网站动作没有发生。

任务结束后由应用调用browser.close()关闭浏览器;没有活动浏览器时返回false。下一次使用会创建新浏览器,曾使用旧浏览器的scope会收到restarted: true。保留多久、允许访问哪些主机,可通过browserRun的keepAliveMs和guardrails选项设计;这些配置不替代网站或账户授权。

免费每天10分钟,不是每个会话都送10分钟

当前Browser Run价格页同时支持Workers Free与Paid。Free包含每天10分钟浏览器时长和3个并发浏览器;这些是账号方案额度,与持久会话默认空闲10分钟不同。跨回合保留会话不会把每日额度重新开始计算。

Paid包含每月10小时浏览器时长,超出每小时0.09美元。CDP属于Browser Sessions,除了时长,还计算并发浏览器:按每日峰值的月平均包含10个,超出部分每个2美元。不要把包含的并发计费额度当成本文已确认的全部运行上限。

例如官方给出的假设用量是每月50小时,前15天峰值10个、后15天峰值20个浏览器:时长超额3.60美元,并发月平均15个、超额10美元,合计13.60美元。这只是Browser Run项目费用,不是包含模型、Workers与存储的完整应用账单;价格页标注4月21日更新,不是10月13日涨价公告。

先用两个只读回合,确认真的回到原页面

可按官方思路做一项未执行的验证:在获准的测试环境,让同一assistant先打开公开example.com读取标题,再在空闲期限内要求截取已经打开的页面,不重新导航。核对实际会话、活动标签页和返回结果,而不只看模型说“我记得”。

接着分别检查人工登录后的下一回合、过期后的restarted分支,以及调用中断时的结果核实流程。浏览器截图只能帮助观察页面,不能单独证明真实付款或系统写入成功。单纯读取已知公开文档时,已有web_fetch指南更适合;需要交互、JavaScript页面或登录延续时再选择浏览器。

资料来源

常见问题

web_fetch能沿用这个浏览器的登录吗?

不能。web_fetch按URL发GET,不携带浏览器Cookie或凭据。需要继续一个已登录页面时,应通过对应Browser操作;公开资料读取与浏览器会话是两条不同路径。

各适配器都把截图交给模型看吗?

方式不同。Pi把截图作为工具结果中的图像,支持图像的模型可检查它,界面也可展示。AI SDK适配器把截图提供给界面、向模型发送文字摘要;TanStack AI不返回截图,并引导模型读页面内容。

自定义harness怎样断开连接但保留浏览器?

通过Browser.connect({ scope })取得CDP连接、活动标签页标识和restarted标记,使用setActiveTarget()记住标签页;cdp.disconnect()释放连接而不关闭Browser。浏览器本身的空闲、关闭和崩溃边界仍然适用。

价格页说超时不收费,能套到所有browserTool调用吗?

不能。该FAQ针对Quick Actions发生waitForTimeout错误时不收取浏览器会话费用;browserTool通过CDP使用Browser Sessions。两种方法的计费方式不同,不应把Quick Actions的单项说明扩大为所有中断或失败都免费。