-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Connect Puppeteer or Playwright
Ralph edited this page May 30, 2026
·
1 revision
Obscura speaks the Chrome DevTools Protocol over WebSocket. Puppeteer and Playwright connect to it like remote Chrome.
obscura serve --port 9222obscura listening on ws://127.0.0.1:9222
npm install puppeteer-coreconst puppeteer = require('puppeteer-core');
const browser = await puppeteer.connect({
browserWSEndpoint: 'ws://127.0.0.1:9222',
});
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title()); // "Example Domain"
await browser.disconnect();Use puppeteer-core, not puppeteer. The puppeteer package bundles a Chrome download.
npm install playwrightconst { chromium } = require('playwright');
const browser = await chromium.connectOverCDP('ws://127.0.0.1:9222');
const context = browser.contexts()[0] || await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();Use connectOverCDP, not connect. Playwright's connect speaks Playwright's own protocol, which obscura does not implement.
Default is domcontentloaded. For full subresource load:
await page.goto('https://example.com', { waitUntil: 'load' });| Value | Returns when |
|---|---|
domcontentloaded |
HTML parsed, scripts ran (default) |
load |
All subresources finished |
networkidle2 |
≤2 network connections active for 500ms |
networkidle0 |
0 network connections active for 500ms |
-
page.goto,page.reload,page.goBack,page.goForward -
page.evaluate,page.evaluateHandle -
page.click,page.type,page.fill -
page.waitForSelector,page.waitForFunction,page.waitForNavigation -
page.cookies,page.setCookie,context.cookies -
page.setRequestInterception, block / modify page.exposeFunction-
page.content,page.title,page.url
-
page.screenshot: obscura doesn't render pixels. - Per-page V8 isolation: pages share one V8 isolate. A heavy script on one page can stall others.
- Cloudflare / Datadome / Akamai bypass: see Configure stealth and proxies.