指导 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()
热门AI工具
相关专题
本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。
0
2026.11.12
本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。
0
2026.11.12
本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。
0
2026.11.12
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.8万人学习
共6课时 | 54.7万人学习
最新文章