下面是我用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” ,我仍可以看到浏览器尚未关闭。
如果没有关闭浏览器(如进行扫描),则服务器很有可能会用尽内存,我不希望这样做。
我该如何解决这个问题?
答案 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
函数。