Mirror the wiki content into a docs/ tree so GitBook Git Sync can connect to this repo. Adds SUMMARY.md for the table of contents, .gitbook.yaml pointing GitBook at docs/, and converts wiki page links to relative .md paths.
2.4 KiB
2.4 KiB
Obscura speaks the Chrome DevTools Protocol over WebSocket. Puppeteer and Playwright connect to it like remote Chrome.
Start the server
obscura serve --port 9222
obscura listening on ws://127.0.0.1:9222
Puppeteer
npm install puppeteer-core
const 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.
Playwright
npm install playwright
const { 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.
waitUntil
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 |
Supported
page.goto,page.reload,page.goBack,page.goForwardpage.evaluate,page.evaluateHandlepage.click,page.type,page.fillpage.waitForSelector,page.waitForFunction,page.waitForNavigationpage.cookies,page.setCookie,context.cookiespage.setRequestInterception, block / modifypage.exposeFunctionpage.content,page.title,page.url
Not supported
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.