错误:EPERM:运行puppeteer JavaScript节点时不允许操作



我有一个脚本,它在无限循环中抓取多个URL,并通知我网站的任何更改。每次我让它运行一段时间,我回来时都会发现它已经完成了循环的数十次/数百次迭代,但我最终还是犯了这个错误。

[Error: EPERM: operation not permitted, unlink 'C:UsersuserAppDataLocalTemppuppeteer_dev_chrome_profile-3thzgECrashpadMetrics-active.pma'] {
errno: -4048,
code: 'EPERM',
syscall: 'unlink',
path: 'C:\Users\user\AppData\Local\Temp\puppeteer_dev_chrome_profile-3thzgE\CrashpadMetrics-active.pma'
}

这个错误似乎不会发生在特定的行上,因为如前所述,在出现这个错误之前,脚本已经完成了循环的几个完整迭代。

我在谷歌上搜索了这个错误,但人们似乎只有在NPM中才真正体验到它,或者如果他们确实在木偶师中体验到了它,它就在他们代码的特定行上。当我使用在线.pma阅读器读取.pma文件时,这是我得到的消息:

CrashpadMetrics UMA.PersistentAllocator.CrashpadMetrics.UsedPct UMA.PersistentAllocator.CrashpadMetrics.Errors Crashpad.HandlerLifetimeMilestone Stability.BrowserExitCodes

对我来说,做这个

虽然这是令人讨厌的行为,但有一个解决方法:在关闭浏览器之前关闭所有页面

let pages = await browser.pages(); await Promise.all(pages.map(page =>page.close())); await browser.close();

https://www.gitmemory.com/issue/puppeteer/puppeteer/6563/739149056

如果您在类似情况下在Windows上运行此程序,解决方案是将节点进程添加到Windows Security的排除列表中。我认为它阻止了对某些临时文件的访问,而节点在这方面失败了。

最新更新