Puppeteer+Chromium(v112)导航失败:浏览器已断开连接问题求助
问题:Puppeteer搭配Chromium v112访问部分网站时出现浏览器断开错误
使用Puppeteer搭配Chromium(v112)访问多个网站时,在www.baidu.com、www.bilibili.com、www.microsoft.com、www.apple.com等站点上遇到如下错误:
STDERR: Error: Navigation failed because browser has disconnected! at new LifecycleWatcher (/puppeteer/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js:83:223) at Frame.goto (/puppeteer/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Frame.js:183:25) at CDPPage.goto (/puppeteer/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js:438:91) at /puppeteer/iframes.js:44:24
相关代码如下:
const puppeteer = require('puppeteer'); const Xvfb = require('xvfb'); var args = process.argv; // node iframes.js site extn (async () => { var xvfb = new Xvfb({ silent: true, reuse: true, // xvfb_args: ["-screen", "0", '1280x720x24', "-ac"], }); xvfb.start((err)=>{if (err) console.error(err)}); const browser = await puppeteer.launch({ headless: false, ignoreDefaultArgs: ["--disable-extensions","--enable-automation"], args: [ "--disable-gpu", "--disable-dev-shm-usage", "--no-sandbox", "--disable-setuid-sandbox", "--no-first-run", "--no-zygote", "--single-process", '--disable-web-security', '--disable-features=IsolateOrigins,site-per-process', '--disable-web-security', '--disable-features=IsolateOrigins,site-per-process', // `--load-extension=/home/ritik/work/pes/extensions/privacy_extn/${args[3]}`, '--display='+xvfb._display // '--single-process', '--window-size=960,1080', '--disable-features=AudioServiceOutOfProcess' ], // executablePath: '/usr/bin/google-chrome' executablePath: '/snap/bin/chromium' }); const page = await browser.newPage(); await page.setViewport({ width: 960, height: 1080 }); await page.waitForTimeout(2000); var sites = args[2].split(','); for (let index=0; index<sites.length; index++){ let site = sites[index]; try{ await page.goto(site, { waitUntil: 'networkidle2', timeout: 60000 }); await page.waitForTimeout(2000); } catch (error){ console.error(error); console.log(site); // continue; break; } } await browser.close(); xvfb.stop(); })();
解决方案
1. 移除冲突启动参数
- 删除
--no-zygote和--single-process:这两个参数强制Chromium单进程运行,复杂站点极易引发崩溃断开。 - 去掉重复的
--disable-web-security和--disable-features=IsolateOrigins,site-per-process,保留一份即可。
2. 修复参数语法错误
--display=参数后缺少逗号,导致后续参数无法被正确解析,需添加逗号分隔。
3. 优化跳转与错误处理
- 增加浏览器断开监听,避免脚本卡死。
- 将循环内的
break改为continue,单个站点失败不中断后续任务。 - 可选:调整
waitUntil为domcontentloaded或延长超时时间,适配不同站点加载特性。
修改后的完整代码
const puppeteer = require('puppeteer'); const Xvfb = require('xvfb'); var args = process.argv; // node iframes.js site extn (async () => { var xvfb = new Xvfb({ silent: true, reuse: true, xvfb_args: ["-screen", "0", '1280x720x24', "-ac"], }); xvfb.start((err)=>{if (err) console.error(err)}); const browser = await puppeteer.launch({ headless: false, ignoreDefaultArgs: ["--disable-extensions","--enable-automation"], args: [ "--disable-gpu", "--disable-dev-shm-usage", "--no-sandbox", "--disable-setuid-sandbox", "--no-first-run", '--disable-web-security', '--disable-features=IsolateOrigins,site-per-process', '--display='+xvfb._display, '--window-size=960,1080', '--disable-features=AudioServiceOutOfProcess' ], executablePath: '/snap/bin/chromium' }); // 监听浏览器断开事件 browser.on('disconnected', () => { console.error('浏览器意外断开连接'); process.exit(1); }); const page = await browser.newPage(); await page.setViewport({ width: 960, height: 1080 }); await page.waitForTimeout(1000); var sites = args[2].split(','); for (let index=0; index<sites.length; index++){ let site = sites[index]; try{ await page.goto(site, { waitUntil: 'domcontentloaded', timeout: 80000 }); await page.waitForTimeout(1500); } catch (error){ console.error(`访问${site}失败:`, error); continue; } } await browser.close(); xvfb.stop(); })();
额外建议
- 确认Puppeteer版本与Chromium v112兼容(对应Puppeteer v19.x),版本不匹配会引发兼容性问题。
- 若snap安装的Chromium存在权限限制,可尝试切换为deb包安装的版本。
内容的提问来源于stack exchange,提问作者Ritik Roongta
相关产品推荐
相关产品推荐

