You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:39:53