I'm getting the following error when I'm using playwright . does it only works with a puppeteer ? pls help . Error while handling browser contexts: Error: browserContext.newPage: Protocol error
(Target.createTarget): Not supported
at main (xyz.js:68:42) {name: 'Error', stack: 'browserContext.newPage: Protocol error (Target.createTarget): Not supported', message: 'browserContext.newPage: Protocol error (Target.createTarget): Not supported'}
openAndConnectToVsCodeUsingCdp.ts:78
arg1 =
Error: browserContext.newPage: Protocol error (Target.createTarget): Not supported
at main (xyz.js:68:42) {name: 'Error', stack: 'browserContext.newPage: Protocol error (Target.createTarget): Not supported', message: 'browserContext.newPage: Protocol error (Target.createTarget): Not supported'}
main @ xyz.ts:78:13
◀ await ▶
processTicksAndRejections @ internal/process/task_queues:105:5
◀ await ▶
processTicksAndRejections @ internal/process/task_queues:105:5
◀ await ▶
<anonymous> @ xyz.ts:100
<anonymous> @ internal/modules/cjs/loader:1723:14
<anonymous> @ internal/modules/cjs/loader:1888:10
<anonymous> @ internal/modules/cjs/loader:1458:32
<anonymous> @ internal/modules/cjs/loader:1275:12
traceSync @ diagnostics_channel:322:14
wrapModuleLoad @ internal/modules/cjs/loader:234:24
executeUserEntryPoint @ internal/modules/run_main:151:5
<anonymous> @ internal/main/run_main_module:33:47
Error: browserContext.newPage: Protocol error (Target.createTarget): Not supported
at main (xyz.js:68:42) {name: 'Error', stack: 'browserContext.newPage: Protocol error (Target.createTarget): Not supported', message: 'browserContext.newPage: Protocol error (Target.createTarget): Not supported'}
import { chromium, ChromiumBrowser } from 'playwright';
import { spawn } from 'child_process';
import fetch from 'node-fetch';
import { delay } from '../../utils/delay';
function spawnVSCode(port: number) {
return spawn(
'/Applications/Visual Studio Code.app/Contents/MacOS/Electron',
[
`--remote-debugging-port=${port}`,
'--user-data-dir=/tmp/foo', // Use temporary data dir to get welcome screen
'--enable-logging',
],
{
detached: true,
env: process.env,
stdio: ['pipe', 'pipe', 'pipe']
}
);
}
async function main() {
const port = 29378;
const proc = spawnVSCode(port);
// Wait for VSCode to start
await delay(2000);
// Get the WebSocket endpoint
const response = await fetch(`http://127.0.0.1:${port}/json/list`);
const endpoints = await response.json() as any[];
const endpoint = endpoints.find(p => !p.title.match(/^sharedProcess/));
if (!endpoint) {
throw new Error('Could not find VSCode debug endpoint');
}
// Connect to the browser using CDP
const browser = await chromium.connectOverCDP({
endpointURL: endpoint.webSocketDebuggerUrl,
slowMo: 50
}) as ChromiumBrowser;
let page;
try {
// Get all browser contexts
const contexts = browser.contexts();
console.log(`Found ${contexts.length} browser contexts`);
if (contexts.length === 0) {
// If no contexts exist, create a new one
console.log('No contexts found, creating new context');
const newContext = await browser.newContext();
page = await newContext.newPage();
} else {
// Try to get page from existing contexts
for (const context of contexts) {
try {
const pages = context.pages();
if (pages.length > 0) {
page = pages[0];
console.log('Found existing page');
break;
}
} catch (e) {
console.log('Error accessing pages in context:', e);
continue;
}
}
// If still no page found, create new one in first context
if (!page) {
console.log('No pages found in existing contexts, creating new page');
page = await contexts[0].newPage();
}
}
} catch (e) {
console.error('Error while handling browser contexts:', e);
throw e;
}
if (!page) {
throw new Error('Failed to get or create a page');
}
// Click new file button
await page.click('[href="command:workbench.action.files.newUntitledFile"]');
// Type some text
await page.type('.monaco-editor', 'Hello! I am automating Visual Studio Code with Playwright!\n');
await page.type('.monaco-editor', 'This is a super cool way of generating foolproof demos.');
// Clean up after 1 second
setTimeout(() => {
proc.kill();
process.exit(0);
}, 1000);
}
main().catch(console.error);