导航超时后关闭浏览器

时间:2019-08-14 12:59:01

标签: 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();

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

根据操纵up超时(timeout: 30000),有100%的机会会发生导航超时:发生30000毫秒超出错误的情况,特别是因为我强迫这样做。

>

问题

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

如果没有关闭浏览器(如进行扫描),则服务器很有可能会用尽内存,我不希望这样做。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您要将代码包装到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();
}

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