我用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”后,我也可以看到浏览器并未关闭。
如果浏览器在扫描完成后没有关闭,那么服务器很可能会耗尽内存,而我不希望这样。
我怎么解决这个问题?
您希望将代码包装到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
函数。
归档时间: |
|
查看次数: |
1680 次 |
最近记录: |