Run Playwright Without Maintaining Browser Infrastructure
Change your connection URL and your existing Playwright suite runs on managed browsers. Chromium, Chrome, Firefox, WebKit, and Edge are all reachable from the same API token.
Five engines, one endpoint
Playwright is the only library that reaches every browser Browserless runs. Firefox, WebKit, and Edge are available through Playwright's native protocol and cannot be driven with Puppeteer.
| Browser | CDP path (connectOverCDP) | Native path (connect) | Stealth | Notes |
|---|---|---|---|---|
| Chromium | /chromium | /chromium/playwright | Available | Default. Recommended for most automation. |
| Chrome | /chrome | /chrome/playwright | Available | Proprietary codecs for streaming and DRM sites. |
| Firefox | Not supported | /firefox/playwright | Not available | Gecko engine. Playwright reaches it, Puppeteer cannot. |
| WebKit | Not supported | /webkit/playwright | Not available | Safari engine, for iOS and mobile web checks. |
| Edge | Not supported | /edge/playwright | Not available | Chromium-based Edge for Microsoft-stack testing. |
Chromium
- connectOverCDP
- /chromium
- connect
- /chromium/playwright
- Stealth
- Available
Default. Recommended for most automation.
Chrome
- connectOverCDP
- /chrome
- connect
- /chrome/playwright
- Stealth
- Available
Proprietary codecs for streaming and DRM sites.
Firefox
- connectOverCDP
- Not supported
- connect
- /firefox/playwright
- Stealth
- Not available
Gecko engine. Playwright reaches it, Puppeteer cannot.
WebKit
- connectOverCDP
- Not supported
- connect
- /webkit/playwright
- Stealth
- Not available
Safari engine, for iOS and mobile web checks.
Edge
- connectOverCDP
- Not supported
- connect
- /edge/playwright
- Stealth
- Not available
Chromium-based Edge for Microsoft-stack testing.
Two ways to connect
connectOverCDP is the recommended default and tolerates version drift between your client and our workers. Native connect is version-coupled but required for Firefox, WebKit, and Edge.
import { chromium } from 'playwright-core';
const browser = await chromium.connectOverCDP(
'wss://production-sfo.browserless.io?token=YOUR_API_TOKEN'
);
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();import { firefox } from 'playwright-core';
const browser = await firefox.connect(
'wss://production-sfo.browserless.io/firefox/playwright?token=YOUR_API_TOKEN'
);
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();from playwright.sync_api import sync_playwright
TOKEN = "YOUR_API_TOKEN"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(
f"wss://production-sfo.browserless.io?token={TOKEN}"
)
context = browser.new_context()
page = context.new_page()
page.goto("https://example.com")
print(page.title())
browser.close()// Create a session that outlives a single connection
const res = await fetch(
'https://production-sfo.browserless.io/session?token=YOUR_API_TOKEN',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ ttl: 60000 }),
}
);
const { connect } = await res.json();
// Connect now, then reconnect later to the same persisted session
const browser = await chromium.connectOverCDP(connect);What you get on the managed fleet
The hard part is never the script
"The implementation is probably fine. It's the management of the session, making sure it's fault-tolerant. Those other pieces that are more like ops and DevOps and infrastructure. Those are the harder ones. And everything keeps changing. Browsers need to be updated to the new version of Chrome. All that stuff. It's a cat-and-mouse game."
Cyrus Ghazanfar
Co-founder & CTO, Beagle
Point your Playwright suite at Browserless
The free plan includes 1,000 units, enough to run a real suite before you decide.