导航超时后关闭浏览器

Sud*_*Sur 4 node.js puppeteer

我用nodejs + puppeteer 编写了下面的代码,其目标是截取用户网站的屏幕截图:

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://MY_WEBSITE/try/slowURL',{timeout: 30000, waitUntil: 'networkidle0' });//timeout 30 seconds
await page.setViewport({width: 1920, height: 1080});
await page.screenshot({path: pathUpload});
await browser.close();
Run Code Online (Sandbox Code Playgroud)

它的操作非常简单,但为了测试超时,我创建了一个http://MY_WEBSITE/try/slowURL需要 200 秒加载的页面 ( )。

根据 puppeteer 超时 ( timeout: 30000),有 100% 的机会发生“导航超时超出:超过 30000 毫秒”错误,尤其是因为我强制执行它。

问题

通过htop命令(linux中使用),即使系统崩溃并显示“TimeoutError”后,我也可以看到浏览器并未关闭。

如果浏览器在扫描完成后没有关闭,那么服务器很可能会耗尽内存,而我不希望这样。

我怎么解决这个问题?

Tho*_*orf 7

您希望将代码包装到try..catch..finally语句中以处理错误并关闭浏览器。

代码示例

const browser = await puppeteer.launch();
try {
    const page = await browser.newPage();
    await page.goto(/* ... */);
    // more code which might throw...
} catch (err) {
    console.error('error', err.message);
} finally {
    await browser.close();
}
Run Code Online (Sandbox Code Playgroud)

您的主要代码在块内执行try。该catch块显示可能发生的任何类型的错误。该finally部分是脚本中始终执行的部分,而不仅仅是在引发错误时执行。这样,无论是否发生错误,您的脚本都会调用该browser.close函数。