Puppeteer中关闭重启浏览器后Cookie丢失的问题咨询
问题场景
编写Puppeteer脚本时,需要让浏览器跨会话保留Cookie,但关闭并重新打开浏览器后Cookie丢失,可复现代码如下:
import puppeteer from 'puppeteer'; (async () => { const userDataDir = 'C:\\junk_dir\\zxc'; const args = [ ...puppeteer.defaultArgs({ headless: false }).map(arg => { if (arg.startsWith('--disable-features')) { return arg.replace('Translate,', '').replace(',Translate', ''); } return arg; }), '--start-maximized', '--disable-sync', '--no-sandbox', '--ignore-certificate-errors' ].filter(arg => !['--enable-automation', '--disable-extensions'].includes(arg)); const browser = await puppeteer.launch({ args, acceptInsecureCerts: true, headless: false, ignoreHTTPSErrors: true, defaultViewport: null, ignoreDefaultArgs: true, userDataDir: userDataDir, pipe: true }); // Open a new page const page = await browser.newPage(); // })();
解决建议
1. 确保浏览器正常关闭
脚本结束时必须调用browser.close(),让Chromium有足够时间将Cookie写入userDataDir目录。直接终止进程会导致Cookie未持久化。
2. 修正ignoreDefaultArgs配置
不要将ignoreDefaultArgs设为true,这会丢失Chromium默认的持久化相关参数。改为仅忽略不需要的特定参数:
ignoreDefaultArgs: ['--enable-automation', '--disable-extensions']
3. 检查目录权限
确认脚本对C:\\junk_dir\\zxc目录拥有读写权限,否则Chromium无法保存Cookie文件。
4. 验证Cookie持久化状态
测试时可以手动在页面完成登录操作,关闭浏览器后查看userDataDir\Default\Cookies文件是否存在且包含内容,以此确认Cookie是否被正确保存。
修改后的完整代码示例
import puppeteer from 'puppeteer'; (async () => { const userDataDir = 'C:\\junk_dir\\zxc'; const args = [ ...puppeteer.defaultArgs({ headless: false }).map(arg => { if (arg.startsWith('--disable-features')) { return arg.replace('Translate,', '').replace(',Translate', ''); } return arg; }), '--start-maximized', '--disable-sync', '--no-sandbox', '--ignore-certificate-errors' ].filter(arg => !['--enable-automation', '--disable-extensions'].includes(arg)); const browser = await puppeteer.launch({ args, acceptInsecureCerts: true, headless: false, ignoreHTTPSErrors: true, defaultViewport: null, // 改为仅忽略指定参数,保留默认持久化配置 ignoreDefaultArgs: ['--enable-automation', '--disable-extensions'], userDataDir: userDataDir, pipe: true }); const page = await browser.newPage(); // 这里可以添加你的页面操作,比如登录等 // 脚本结束前必须关闭浏览器 await browser.close(); })();
内容的提问来源于stack exchange,提问作者Yaniv Levi
相关产品推荐
相关产品推荐

