-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Use with Playwright
SGavrl edited this page May 30, 2026
·
1 revision
obscura serve --port 9222
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();Use connectOverCDP, not connect. Playwright's connect speaks Playwright's own protocol.
await page.goto('https://example.com');
await page.goto('https://example.com', { waitUntil: 'load' });
await page.goto('https://example.com', { waitUntil: 'networkidle' });Default is domcontentloaded. Other values: load, networkidle.
const title = await page.evaluate(() => document.title);
const items = await page.$$eval('.item', els => els.map(el => ({
text: el.textContent,
href: el.querySelector('a')?.href,
})));await page.click('#login-button');
await page.fill('#username', 'alice');
await page.fill('#password', 'secret');
await page.waitForSelector('#dashboard');
await page.waitForFunction(() => window.appReady === true);await page.locator('button.submit').click();
await page.getByRole('button', { name: 'Submit' }).click();
await page.getByLabel('Email').fill('alice@example.com');await context.addCookies([{
name: 'session',
value: 'abc123',
domain: 'example.com',
path: '/',
}]);
const cookies = await context.cookies();await page.route('**/*', route => {
if (route.request().resourceType() === 'image') {
route.abort();
} else {
route.continue();
}
});const page1 = await context.newPage();
const page2 = await context.newPage();
await Promise.all([
page1.goto('https://a.example.com'),
page2.goto('https://b.example.com'),
]);Pages share one V8 isolate. CPU-bound JS on one page blocks the others.
await browser.close(); // closes the CDP connection, leaves obscura serve running-
page.screenshot(),page.pdf(): no pixel rendering. -
page.video(), tracing artifacts that need a real browser. -
BrowserContextstorage state save/restore: use--storage-dironobscura serveinstead, see Persist cookies and storage. - Service workers.