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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:49:56