我在下面使用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%的导航超时的可能性:发生30000ms以上的错误,特别是因为我强迫这样做。
问题
通过该htop
命令(在Linux中使用),即使系统崩溃并显示“ TimeoutError”,我也可以看到浏览器尚未关闭。
而且,如果没有关闭浏览器(如进行扫描),则服务器很有可能用完内存,我不希望这样做。
我怎么解决这个问题?
您想将代码包装到一个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
函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句