通过Puppeteer原始CDP创建BrowserContext失败问题求助
问题:手动发送CDP命令
Target.createBrowserContext报错"Not allowed" 原因分析
你通过page.createCDPSession()创建的是页面级CDP会话,这类会话的权限被Chrome限制,无法执行浏览器全局级别的命令(比如创建浏览器上下文)。而Puppeteer的browser.createBrowserContext()是直接通过浏览器级CDP会话发送命令,拥有操作浏览器全局功能的权限。
解决方法
直接从浏览器实例创建浏览器级别的CDP会话,再执行Target.createBrowserContext命令。
修改后的可运行代码
const puppeteer = require('puppeteer'); (async ()=>{ console.log("STARTING BROWSER"); const browser = await puppeteer.launch({args:["--remote-allow-origins=*"]}); // 创建浏览器级CDP会话(关键:从browser对象创建,而非page) const browserCdp = await browser.createCDPSession(); // 执行创建浏览器上下文命令 const newContextResult = await browserCdp.send("Target.createBrowserContext"); console.log("新浏览器上下文ID:", newContextResult.browserContextId); // 可选:使用新创建的上下文打开页面 const page = await browser.newPage({ browserContextId: newContextResult.browserContextId }); await page.goto('https://example.com'); console.log("页面加载完成"); // 资源清理 await page.close(); await browserCdp.send("Target.disposeBrowserContext", { browserContextId: newContextResult.browserContextId }); await browser.close(); })();
额外说明
- 浏览器级CDP会话绑定到整个浏览器实例,支持所有CDP命令,包括浏览器全局操作(如创建/销毁上下文、管理扩展等)
- 页面级CDP会话仅能操作当前页面的相关命令(如
Page.navigate、Runtime.evaluate),权限范围被限定在页面内
内容的提问来源于stack exchange,提问作者Alexandru Postolache
相关产品推荐
相关产品推荐

