[ PROMPT_NODE_24006 ]
Browser Rendering API 参考
[ SKILL_DOCUMENTATION ]
# 浏览器渲染 API
## REST API
**基础地址:** `https://api.cloudflare.com/client/v4/accounts/{accountId}/browser-rendering`
**认证:** `Authorization: Bearer ` (需“浏览器渲染 - 编辑”权限)
### 端点
| 端点 | 描述 | 关键选项 |
|----------|-------------|-------------|
| `/content` | 获取渲染后的 HTML | `url`, `waitUntil` |
| `/screenshot` | 捕获图像 | `screenshotOptions: {type, fullPage, clip}` |
| `/pdf` | 生成 PDF | `pdfOptions: {format, landscape, margin}` |
| `/snapshot` | HTML + 内联资源 | `url` |
| `/scrape` | 按选择器提取 | `selectors: ["h1", ".price"]` |
| `/json` | AI 结构化提取 | `schema: {name: "string", price: "number"}` |
| `/links` | 获取所有链接 | `url` |
| `/markdown` | 转换为 Markdown | `url` |
bash
curl -X POST '.../browser-rendering/screenshot'
-H "Authorization: Bearer $TOKEN"
-d '{"url":"https://example.com","screenshotOptions":{"fullPage":true}}'
## Workers 绑定
c
// wrangler.jsonc
{ "browser": { "binding": "MYBROWSER" } }
## Puppeteer
typescript
import puppeteer from "@cloudflare/puppeteer";
const browser = await puppeteer.launch(env.MYBROWSER, { keep_alive: 600000 });
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle0' });
// 内容
const html = await page.content();
const title = await page.title();
// 截图/PDF
await page.screenshot({ fullPage: true, type: 'png' });
await page.pdf({ format: 'A4', printBackground: true });
// 交互
await page.click('#button');
await page.type('#input', 'text');
await page.evaluate(() => document.querySelector('h1')?.textContent);
// 会话管理
const sessions = await puppeteer.sessions(env.MYBROWSER);
const limits = await puppeteer.limits(env.MYBROWSER);
await browser.close();
## Playwright
typescript
import { launch, connect } from "@cloudflare/playwright";
const browser = await launch(env.MYBROWSER, { keep_alive: 600000 });
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle' });
// 现代选择器
await page.locator('.button').click();
await page.getByText('Submit').click();
await page.getByTestId('search').fill('query');
// 用于隔离的上下文
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 },
userAgent: 'custom'
});
await browser.close();
## 会话管理
typescript
// 列出会话
await