Skip to content
Integration

Connect with Playwright

Use Playwright Core to connect to a managed Browserherd Chromium session over CDP. Your existing page navigation, selectors, evaluation, and screenshot code continues to work.

Install Playwright Core

playwright-core contains the automation library without downloading local browser binaries.

TERMINAL
npm install playwright-core

Connect to Browserherd

JAVASCRIPT · PLAYWRIGHT
import { chromium } from "playwright-core";

const query = new URLSearchParams({
  token: process.env.BROWSERHERD_API_KEY,
  sessionTTL: "900",
  region: "us-east-1",
  sessionRecording: "true"
});

const browser = await chromium.connectOverCDP(
  `wss://connect.browserherd.com?${query}`
);

const context = browser.contexts()[0];
const page = await context.newPage();
await page.goto("https://example.com");
console.log(await page.title());

await browser.close();
Use the first context returned by Browserherd after connecting over CDP.

Practical examples

Navigate and extract content

JAVASCRIPT
const page = await browser.contexts()[0].newPage();
await page.goto("https://example.com", {
  waitUntil: "networkidle"
});

const result = await page.evaluate(() => ({
  title: document.title,
  heading: document.querySelector("h1")?.textContent,
  url: location.href
}));

console.log(result);

Capture a screenshot

JAVASCRIPT
await page.goto("https://example.com");
await page.screenshot({
  path: "example.png",
  fullPage: true
});

Reuse a persistent profile

Pass a Browserherd profile ID when the workflow needs approved cookies, local storage, or authenticated browser state.

JAVASCRIPT
const query = new URLSearchParams({
  token: process.env.BROWSERHERD_API_KEY,
  profileId: "profile_customer_demo",
  sessionTTL: "1800"
});

const browser = await chromium.connectOverCDP(
  `wss://connect.browserherd.com?${query}`
);

Close sessions reliably

Always close the remote browser in a finally block. Usage continues while a session remains running, up to its configured TTL.

JAVASCRIPT
let browser;

try {
  browser = await chromium.connectOverCDP(endpoint);
  await runWorkflow(browser);
} finally {
  await browser?.close();
}