Node.JS + Puppeteer:browser.close冻结进程

rqcrx0a6  于 2023-04-05  发布在  Node.js
关注(0)|答案(2)|浏览(224)

我正在运行一个非常简单的函数。

module.exports.test = async () => {
    const browser = await puppeteer.launch(puppetOptions);
    try {
        const page = await browser.newPage();
        await page.goto('https://google.com');
        // helper function that pauses for five seconds before moving on
        await pause(5000);
        await browser.close();
        console.log('browser closed');
    } catch (err) {
        console.log(err);
        await browser.close();
    }
}

我从index.js文件运行它:

const server = app.listen(process.env.PORT || 5000, () => {
    test();    
});

现在我用node index.js在我的终端上运行它。它打开了一个浏览器。它打开了一个新页面并导航到Google。它等待了五秒钟。它关闭了浏览器。一切看起来都很好。我在终端上点击ctrl + c来停止进程,但什么也没有发生。通常情况下,这是有效的。如果我删除browser.close函数,ctrl + c会恢复预期的工作,并结束进程。我运行的这个函数是我分解了一个更复杂的函数的结果,这个函数似乎有内存泄漏,所以看起来browser.close确实是罪魁祸首。但是对于我的生活,我不明白为什么它会在简化这么多的时候引起问题。这在headless,和headfull模式。以下是 puppet 师启动选项:

puppetOptions = {
    defaultViewport: null,
    args: [
        "--incognito",
        "--no-sandbox",
        "--single-process",
        "--no-zygote"
    ],
}

puppetOptionsHeadfull = {
    headless: false,
    executablePath: 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe',
}

编辑:我在我的bash终端中也试过这个,也有同样的问题。当我试图手动关闭终端以中止它时,弹出一个错误。

Processes are running in session:
| WPID PID COMMAND
| 10900 1122 winpty node.exe index.js
Close anyway?

编辑2:缩小到它是一个问题与puppeteer-extra最有可能,然而,它似乎是一个错误的核心包.公平最近公开的问题,他们的仓库,反映了这个错误发现在这里:https://github.com/berstend/puppeteer-extra/issues/421
我将保留这个问题,以防其他人遇到同样的问题,他们不会拔出头发调试它。

58wvjzkj

58wvjzkj1#

我也遇到过这个问题。在我看来,两个参数'--no-sandbox'和'--disable-setuid-sandbox'是罪魁祸首,尽管这不是直观的原因。尝试删除no sandbox参数

vd2z7a6w

vd2z7a6w2#

这取决于标志的组合。如果我们需要无头模式和--no-sandbox标志,那么试试这个 puppet 师启动代码:

const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox','--single-process', '--no-zygote'], ignoreHTTPSErrors: true });
  const page = await browser.newPage();
...
await browser.close();

相关问题