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

如何为Puppeteer默认浏览器上下文添加Cookie且不打开额外窗口

问题解决:Puppeteer打开双窗口+默认上下文共享Cookie

问题根源

你当前代码里调用了browser.createBrowserContext(),这会创建一个全新的隔离浏览器上下文。而Puppeteer启动浏览器时,默认会自动创建一个默认上下文,并打开一个空白页(about:blank)的窗口。两个上下文各自对应一个窗口,所以出现了双窗口的问题。

解决方案

直接使用浏览器的默认上下文来设置Cookie,不需要创建新上下文。这样既不会额外生成窗口,Cookie也会自动应用到该上下文下的所有页面,实现共享。

修改后的代码如下:

const puppeteer = require('puppeteer-extra')
const fs = require('fs');
const cookiesPath = "cookies.txt";
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
const { createCursor } = require("ghost-cursor")
puppeteer.use(StealthPlugin())

// ... 你的其他代码(比如读取cookies的逻辑)

cookies = JSON.parse(cookies)

let args = []
if(proxy) {
  args.push(`--proxy-server=${proxy}`)
}

puppeteer.launch({ headless: false, args: args }).then(async browser => {
  // 关键修改:使用默认浏览器上下文,而非创建新上下文
  const defaultContext = browser.defaultBrowserContext()
  await defaultContext.setCookie(...cookies)

  // 获取默认上下文里的默认页面(就是启动时打开的那个空白窗口)
  let pages = await browser.pages()
  let page = pages[0] // 第一个页面就是默认打开的空白页

  let finalUserAgent = userAgent || defaultUserAgent
  console.log('Attempting to login w existing session..')
  await page.setUserAgent(finalUserAgent)
  await page.setDefaultNavigationTimeout(100000); // 90 seconds

  await page.goto(url)
  console.log(`logged in`)
})
console.log(userAgent, proxy);
res.send("browser launched with session");

额外说明

  • 默认上下文的Cookie会被该上下文下所有新建页面共享,完全满足你的需求。
  • 如果不想使用启动时的默认空白页,可以先关闭它再新建页面:
    let pages = await browser.pages()
    await pages[0].close() // 关闭默认空白页
    let page = await defaultContext.newPage() // 在默认上下文新建页面
    
    这样也只会打开一个窗口,且Cookie依然全局共享。

内容的提问来源于stack exchange,提问作者Tharusha Jayasooriya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:22:17