Skip to content

DevTools protocol

For every running session WebSummoner proxies the Chrome DevTools protocol to the browser container. Point any CDP client at:

<ws-or-http>://websummoner.example.com:4444/devtools/<session-id>/<method>
MethodProtocolMeaning
/browserWebSocketBrowser-level DevTools websocket
/WebSocketAlias for /browser
/pageWebSocketCurrent page (target) websocket — ideal when a single tab is open
/page/<target-id>WebSocketWebsocket for a specific tab
/json/protocolHTTPSupported protocol methods as JSON (used by some client libraries)

For example, the current-page websocket is:

ws://websummoner.example.com:4444/devtools/<session-id>/page

Example: Puppeteer over a WebdriverIO session

Section titled “Example: Puppeteer over a WebdriverIO session”

Because the Selenium session and the CDP connection share the same browser, you can mix high-level Selenium actions with Puppeteer’s low-level access:

const { remote } = require('webdriverio');
const puppeteer = require('puppeteer-core');
const host = 'websummoner.example.com';
(async () => {
const browser = await remote({
hostname: host,
capabilities: {
browserName: 'chrome',
browserVersion: '152.0',
},
});
const devtools = await puppeteer.connect({
browserWSEndpoint: `ws://${host}:4444/devtools/${browser.sessionId}`,
});
const page = await devtools.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'screenshot.png' });
console.log(await page.title());
await devtools.close();
await browser.deleteSession();
})().catch((e) => console.error(e));