---
id: daily-functions
name: "functions"
url: https://skills.yangsir.net/skill/daily-functions
author: browserbase
domain: automation
tags: ["automation", "web-scraping", "browser-automation", "serverless"]
install_count: 1700
rating: 4.30 (13 reviews)
github: https://github.com/browserbase/skills
---

# functions

> 通过 Browserbase CLI 部署无服务器浏览器自动化，支持截图、数据抓取和 UI 测试，无需管理浏览器基础设施

**Stats**: 1,700 installs · 4.3/5 (13 reviews)

## Before / After 对比

### 浏览器自动化部署

**Before**:

手动配置 Puppeteer/Playwright，管理浏览器实例、代理和 Headless 运行，维护成本高，一个脚本需要 2 小时配置

**After**:

使用 Browserbase CLI 一键部署无服务器浏览器，自动处理会话管理和代理，10 分钟内完成自动化脚本运行

| Metric | Before | After | Change |
|---|---|---|---|
| 配置时间 | 120分钟 | 10分钟 | -92% |

## Readme

# functions

# Browserbase Functions

Deploy serverless browser automation using the official `bb` CLI.

## Prerequisites

Get API key and Project ID from: [https://browserbase.com/settings](https://browserbase.com/settings)

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

```

## Creating a Function Project

### 1. Initialize

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

```

This creates:

```
my-function/
├── package.json
├── index.ts        # Your function code
└── .env            # Add credentials here

```

### 2. Add Credentials to .env

```
echo "BROWSERBASE_API_KEY=$BROWSERBASE_API_KEY" >> .env
echo "BROWSERBASE_PROJECT_ID=$BROWSERBASE_PROJECT_ID" >> .env

```

### 3. Install Dependencies

```
pnpm install

```

## Function Structure

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

defineFn("my-function", async (context) => {
  const { session, params } = context;

  // Connect to browser
  const browser = await chromium.connectOverCDP(session.connectUrl);
  const page = browser.contexts()[0]!.pages()[0]!;

  // Your automation
  await page.goto(params.url || "https://example.com");
  const title = await page.title();

  // Return JSON-serializable result
  return { success: true, title };
});

```

**Key objects:**

- `context.session.connectUrl` - CDP endpoint to connect Playwright

- `context.params` - Input parameters from invocation

## Development Workflow

### 1. Start Dev Server

```
pnpm bb dev index.ts

```

Server runs at `http://127.0.0.1:14113`

### 2. Test Locally

```
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. Iterate

The dev server auto-reloads on file changes. Use `console.log()` for debugging - output appears in the terminal.

## Deploying

```
pnpm bb publish index.ts

```

Output:

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

```

**Save the Function ID** - you need it to invoke.

## Quick Reference

Command
Description

`pnpm dlx @browserbasehq/sdk-functions init <name>`
Create new project

`pnpm bb dev <file>`
Start local dev server

`pnpm bb publish <file>`
Deploy to Browserbase

For invocation examples, common patterns, and troubleshooting, see [REFERENCE.md](https://github.com/browserbase/skills/blob/HEAD/skills/functions/REFERENCE.md).
Weekly Installs579Repository[browserbase/skills](https://github.com/browserbase/skills)GitHub Stars548First SeenTodaySecurity Audits[Gen Agent Trust HubPass](/browserbase/skills/functions/security/agent-trust-hub)[SocketPass](/browserbase/skills/functions/security/socket)[SnykWarn](/browserbase/skills/functions/security/snyk)

---
*Source: https://skills.yangsir.net/skill/daily-functions*
*Markdown mirror: https://skills.yangsir.net/api/skill/daily-functions/markdown*