Functions

Polar Sponsor
爱发电 赞助
.NET 9.0

指导 Claude 使用官方 bb CLI 部署无服务器浏览器自动化。

浏览器库函数 Skill.

功能概述

浏览器库函数 Skill.是一项面向实际任务的技能,主要用于Guide Claude 通过使用正式 bb CLI 部署无服务器浏览器自动化.;When to use. 使用此技能时: User 想要部署自动化在 s 上运行。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Browserbase Functions 技能

引导 Claude 使用官方 bb CLI 部署无服务器浏览器自动化。

适用场景

在以下情况下使用该技能:

  • 用户希望将自动化任务部署为定时运行
  • 用户需要一个用于浏览器自动化的 Webhook 端点
  • 用户希望在云端(而非本地)运行自动化任务
  • 用户询问有关 Browserbase Functions 的问题

前提条件

1. 获取凭证

从以下地址获取 API 密钥和 Project ID:https://browserbase.com/settings

2. 设置环境变量

直接设置:

export BROWSERBASE_API_KEY="your_api_key"
export BROWSERBASE_PROJECT_ID="your_project_id"

创建函数项目

1. 使用官方 CLI 初始化

pnpm dlx @browserbasehq/sdk-functions init my-function
cd my-function

此操作将生成如下结构:

my-function/
├── package.json
├── index.ts        # 你的函数代码
└── .env            # 在此处添加凭证

2. 将凭证添加至 .env

# 从已保存的凭证中复制
echo "BROWSERBASE_API_KEY=$BROWSERBASE_API_KEY" >> .env
echo "BROWSERBASE_PROJECT_ID=$BROWSERBASE_PROJECT_ID" >> .env

或手动编辑 .env 文件:

BROWSERBASE_API_KEY=your_api_key
BROWSERBASE_PROJECT_ID=your_project_id

3. 安装依赖项

pnpm install

函数结构

import { defineFn } from "@browserbasehq/sdk-functions";
import { chromium } from "playwright-core";

defineFn("my-function", async (context) => {
  const { session, params } = context;
  
  // 连接浏览器
  const browser = await chromium.connectOverCDP(session.connectUrl);
  const page = browser.contexts()[0]!.pages()[0]!;
  
  // 执行你的自动化逻辑
  await page.goto(params.url || "https://example.com");
  const title = await page.title();
  
  // 返回可 JSON 序列化的结果
  return { success: true, title };
});

关键对象说明:

  • context.session.connectUrl —— Playwright 用于连接的 CDP 终端地址
  • context.params —— 调用时传入的输入参数

开发工作流

1. 启动开发服务器

pnpm bb dev index.ts

服务器运行于 http://127.0.0.1:14113

2. 本地测试

curl -X POST http://127.0.0.1:14113/v1/functions/my-function/invoke 
  -H "Content-Type: application/json" 
  -d '{"params": {"url": "https://news.ycombinator.com"}}'

3. 迭代开发

开发服务器会在文件变更后自动重载。使用 console.log() 进行调试,输出内容将显示在终端中。

部署

发布至 Browserbase

pnpm bb publish index.ts

输出示例:

Function published successfully
Build ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Function ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

请保存 Function ID —— 后续调用时必需使用。

调用已部署的函数

通过 curl 调用

# 发起调用
curl -X POST "https://api.browserbase.com/v1/functions/FUNCTION_ID/invoke" 
  -H "Content-Type: application/json" 
  -H "x-bb-api-key: $BROWSERBASE_API_KEY" 
  -d '{"params": {"url": "https://example.com"}}'

# 响应示例:{"id": "INVOCATION_ID"}

# 轮询获取结果
curl "https://api.browserbase.com/v1/functions/invocations/INVOCATION_ID" 
  -H "x-bb-api-key: $BROWSERBASE_API_KEY"

通过代码调用

async function invokeFunction(functionId: string, params: object) {
  // 发起调用
  const invokeRes = await fetch(
    `https://api.browserbase.com/v1/functions/${functionId}/invoke`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-bb-api-key': process.env.BROWSERBASE_API_KEY!,
      },
      body: JSON.stringify({ params }),
    }
  );
  const { id: invocationId } = await invokeRes.json();

  // 持续轮询直至完成
  while (true) {
    await new Promise(r => setTimeout(r, 5000));
    
    const statusRes = await fetch(
      `https://api.browserbase.com/v1/functions/invocations/${invocationId}`,
      { headers: { 'x-bb-api-key': process.env.BROWSERBASE_API_KEY! } }
    );
    const result = await statusRes.json();
    
    if (result.status === 'COMPLETED') return result.results;
    if (result.status === 'FAILED') throw new Error(result.error);
  }
}

常见模式

参数化网页抓取

defineFn("scrape", async ({ session, params }) => {
  const browser = await chromium.connectOverCDP(session.connectUrl);
  const page = browser.contexts()[0]!.pages()[0]!;
  
  await page.goto(params.url);
  await page.waitForSelector(params.selector);
  
  const items = await page.$$eval(params.selector, els => 
    els.map(el => el.textContent?.trim())
  );
  
  return { url: params.url, items };
});

带身份验证的操作

defineFn("authenticated-action", async ({ session, params }) => {
  const browser = await chromium.connectOverCDP(session.connectUrl);
  const page = browser.contexts()[0]!.pages()[0]!;
  
  // 登录
  await page.goto("https://example.com/login");
  await page.fill('[name="email"]', params.email);
  await page.fill('[name="password"]', params.password);
  await page.click('button[type="submit"]');
  await page.waitForURL('**/dashboard');
  
  // 执行需认证的操作
  const data = await page.textContent('.user-data');
  return { data };
});

错误处理

defineFn("safe-scrape", async ({ session, params }) => {
  const browser = await chromium.connectOverCDP(session.connectUrl);
  const page = browser.contexts()[0]!.pages()[0]!;
  
  try {
    await page.goto(params.url, { timeout: 30000 });
    await page.waitForSelector(params.selector, { timeout: 10000 });
    
    const data = await page.textContent(params.selector);
    return { success: true, data };
  } catch (error) {
    return { 
      success: false, 
      error: error instanceof Error ? error.message : 'Unknown error' 
    };
  }
});

CLI 参考命令

命令 说明
pnpm dlx @browserbasehq/sdk-functions init 创建新项目
pnpm bb dev 启动本地开发服务器
pnpm bb publish 部署至 Browserbase

故障排查

“缺少 API 密钥”

# 检查 .env 文件是否包含凭证
cat .env

# 或为当前 Shell 设置
export BROWSERBASE_API_KEY="your_key"
export BROWSERBASE_PROJECT_ID="your_project"

开发服务器无法启动

# 确保 SDK 已安装
pnpm add @browserbasehq/sdk-functions

# 或使用 npx
npx @browserbasehq/sdk-functions dev index.ts

函数执行超时

  • 最大执行时间为 15 分钟
  • 为页面操作显式指定超时时间
  • 优先使用 waitForSelector 而非 sleep

无法连接浏览器

  • 确认正确使用了 session.connectUrl
  • 确保使用的是 chromium.connectOverCDP(),而非 chromium.launch()

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

0

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

0

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

0

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习