Using with Playwright (CDP)
Last updated Sep 26, 2026 You can use Playwright ↗︎ to connect to Browser Run sessions from any Node.js environment and automate browser tasks programmatically via CDP. This is useful for scripts running on your local machine, CI/CD pipelines, or external servers.
Before you begin, create a custom API Token with Browser Rendering - Edit permission.
Prerequisites
- Node.js installed on your machine
- A Cloudflare account with Browser Run enabled
- A Browser Run API token with
Browser Rendering - Editpermissions
Install Playwright
Install the playwright-core package (the version without bundled browsers):
npmyarnpnpmbun
npm i playwright-core
yarn add playwright-core
pnpm add playwright-core
bun add playwright-core
Connect to Browser Run
The following script demonstrates how to connect to a Browser Run session, navigate to a page, extract the title, and take a screenshot.
Create a file named script.js:
const { chromium } = require("playwright-core");
const ACCOUNT_ID = process.env.CF_ACCOUNT_ID || "<ACCOUNT_ID>";
const API_TOKEN = process.env.CF_API_TOKEN || "<API_TOKEN>";
const browserWSEndpoint = `wss://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/browser-run/devtools/browser?keep_alive=600000`;
async function main() {
const browser = await chromium.connectOverCDP(browserWSEndpoint, {
headers: {
Authorization: `Bearer ${API_TOKEN}`,
},
});
const context = browser.contexts()[0];
const page = context.pages()[0] || (await context.newPage());
await page.goto("https://developers.cloudflare.com");
const title = await page.title();
console.log(`Page title: ${title}`);
await page.screenshot({ path: "screenshot.png" });
await browser.close();
}
main().catch(console.error);
Replace ACCOUNT_ID with your Cloudflare account ID and API_TOKEN with your Browser Run API token, or set them as environment variables:
export CF_ACCOUNT_ID="<ACCOUNT_ID>"
export CF_API_TOKEN="<API_TOKEN>"
Run the script
node script.js
You should see the page title printed to the console and a screenshot saved as screenshot.png.
How it works
The script connects directly to Browser Run via WebSocket using the CDP protocol:
- WebSocket endpoint - The
browserWSEndpointURL acquires a new browser session and connects to it via WebSocket - Authentication - The
Authorizationheader with your API token authenticates the request - Keep-alive - The
keep_aliveparameter (in milliseconds) specifies how long the session stays active - Playwright API - Once connected, you use the standard Playwright API to control the browser
Troubleshooting
If you have questions or encounter an error, see the Browser Run FAQ and troubleshooting guide.
Was this helpful?
YesNo
On this page
{"@context":"https://schema.org","@type":"TechArticle","@id":"https://developers.cloudflare.com/browser-run/cdp/playwright/#page","headline":"Using with Playwright (CDP)","description":"Connect Playwright to Browser Run sessions from any Node.js environment to automate browser tasks using the Chrome DevTools Protocol.","url":"https://developers.cloudflare.com/browser-run/cdp/playwright/","inLanguage":"en","image":"https://developers.cloudflare.com/browser-run/cdp/playwright/og.png?v=34c97f4c4e02fe63","dateModified":"2026-09-26","publisher":{"@type":"Organization","name":"Cloudflare","description":"One platform for your apps, agents, and workforce. Build, secure, and scale without managing infrastructure","url":"https://www.cloudflare.com/","sameAs":["https://github.com/cloudflare","https://www.linkedin.com/company/cloudflare","https://x.com/cloudflare"],"logo":{"@type":"ImageObject","url":"https://developers.cloudflare.com/logo.svg"},"address":{"@type":"PostalAddress","streetAddress":"101 Townsend St","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":[{"@type":"ContactPoint","contactType":"Customer Support","url":"https://support.cloudflare.com/","availableLanguage":["English"]},{"@type":"ContactPoint","contactType":"Sales","url":"https://www.cloudflare.com/contact/","availableLanguage":["English"]}]},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"}}
description: Connect Puppeteer to Browser Run sessions from any Node.js environment to automate browser tasks using the Chrome DevTools Protocol. title: Using with Puppeteer (CDP) image: https://developers.cloudflare.com/browser-run/cdp/puppeteer/og.png?v=77807ac77a02a009
Documentation Index
Fetch the complete documentation index at: https://developers.cloudflare.com/browser-run/llms.txt
Use this file to discover all available pages before exploring further.
Docs