Puppeteer: 尝试运行EPERM错误的示例

创建于 2017-08-16  ·  42评论  ·  资料来源: puppeteer/puppeteer

尝试运行以下代码:

var puppeteer = require("puppeteer");

puppeteer.launch().then(async browser => {
    let page = await browser.newPage();
    await page.goto('https://google.com');
    await page.screenshot({ path: 'screenshot.png' });
    browser.close();
});

我收到一个错误:

Error: EPERM: operation not permitted, unlink 'C:\Users\tivac\Desktop\puppeteer-testing\node_modules\puppeteer\.dev_profile1\CrashpadMetrics-active.pma'

在调试过程中,将DEBUG=*为尝试了解发生故障的位置,但是这样做之后效果很好。 😕

在非DEBUG模式下,初次运行体验不是很正常吗? 我不确定,但这就是发生在我身上的事情!

bug host

最有用的评论

我有一个解决方案,您必须在关闭浏览器之前关闭页面。 当然,如果您打开了更多页面,请关闭所有页面。
await page.close(); await browser.close();

await browser.close()遇到了问题,但是感谢@ ivangergo3的回答,添加了几行内容来关闭所有页面,从而摆脱了崩溃错误! 😄

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

编辑12/17/2020

  • 修复了下面提到的缺失括号

所有42条评论

推测:您可能不小心启动了该脚本两次,并且两个平行的操纵up试图使用相同的配置文件文件夹- .dev_profile1运行chrome。

我们应该随机生成配置文件文件夹名称,以便木偶扮演者的并行运行正常。

这是可能的! 尽管似乎不太可能,因为我是通过CLI启动节点的,并且除了想设置浏览器外,没有做任何超出最初设置headless : false事情。 每次复制,直到设置DEBUG ,此时一切都开始正常运行。

+1

你好
我刚刚只使用了操纵up,但仍然遇到相同的错误。 我使用了https://github.com/GoogleChrome/puppeteer/#usage第一个示例脚本。

我也遇到了这个问题,尽管使用了一个甚至更简单的示例脚本,该脚本仅启动浏览器,然后立即尝试将其关闭:

const puppeteer = require('puppeteer');

(async () => {
  console.log("Launching browser.");

  const browser = await puppeteer.launch();

  console.log("Closing browser.");

  browser.close();
})();

我尝试在运行此脚本之前手动删除node_modules/puppeteer/.dev_profile1目录,但该错误仍然发生。

解决方法是,我发现在完成后仅调用process.exit(0)正常工作-即使在父进程意外终止的情况下,木偶手似乎也很喜欢清理任何已启动的Chromium子进程,太好了!

我在运行用法演示的头几次就看到了,但是每次都没有得到。 大约十分钟后,我看到成功远远超过运行脚本的错误。 我不确定是否有帮助。

同样的问题,Windows 10,节点v7.10.0,操纵up 1.0.0。 设置DEBUG = *无效,尝试以管理员身份运行

D:\puppeteer>node index.js
fs.js:1081
  return binding.unlink(pathModule._makeLong(path));
                 ^

Error: EPERM: operation not permitted, unlink 'D:\puppeteer\node_modules\puppeteer\.dev_profile1\CrashpadMetrics-active.pma'
    at Object.fs.unlinkSync (fs.js:1081:18)
    at fixWinEPERMSync (D:\puppeteer\node_modules\rimraf\rimraf.js:210:13)
    at rimrafSync (D:\puppeteer\node_modules\rimraf\rimraf.js:310:28)
    at D:\puppeteer\node_modules\rimraf\rimraf.js:341:5
    at Array.forEach (native)
    at rmkidsSync (D:\puppeteer\node_modules\rimraf\rimraf.js:340:26)
    at rmdirSync (D:\puppeteer\node_modules\rimraf\rimraf.js:333:7)
    at fixWinEPERMSync (D:\puppeteer\node_modules\rimraf\rimraf.js:208:5)
    at rimrafSync (D:\puppeteer\node_modules\rimraf\rimraf.js:310:28)
    at ChildProcess.chromeProcess.on (D:\puppeteer\node_modules\puppeteer\lib\Launcher.js:87:7)

+1

同样的问题,Windows 10,节点v8.4.0,puppeteer 0.9.0

所有人:请您检查一下树梢木偶是否为您工作? 进行了一些更改可能会解决此问题。

Windows 7 x64,Node .js 8.4.0。
使用树梢木偶和README.md示例代码,现在我始终得到此错误:

(node:1040) UnhandledPromiseRejectionWarning:
Unhandled promise rejection (rejection id: 1):
Error: EPERM: operation not permitted,
unlink 'c:\Windows\Temp\puppeteer_dev_profile-dgXrpD\CrashpadMetrics-active.pma'

(node:1040) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated.
In the future, promise rejections that are not handled
will terminate the Node.js process with a non-zero exit code.

个人资料文件夹保留在c:\Windows\Temp\

每个文件夹包含2个带有锁号的文件(仅限系统和管理员访问):

DevToolsActivePort
CrashpadMetrics-active.pma

从最新版本安装时,我没有任何问题。 警告:我使用的设置与发布此问题时的设置完全不同。 当时,我正在将Puppeteer集成到现有项目中,并且几次出现错误之后,由于某种原因,它只是停止了错误。

但是,我想对此更新进行测试。 我认为创建一个新项目是测试此项目的最简单方法。 我创建了一个新项目。 我安装了yarn add puppeteer@latest 。 我运行了一个包含自述示例的index.js文件,每次执行该命令后,一切工作都很好。 所以...也许是固定的? 就像我说的,这是与以前不同的设置,因此这不是一个非常科学的实验。

FWIW:

'use strict';

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  try { await browser.close(); } catch (err) { console.log(err); }
})();
{ Error: EPERM: operation not permitted,
  unlink 'c:\Windows\Temp\puppeteer_dev_profile-BzkIJu\CrashpadMetrics-active.pma'
    at Object.fs.unlinkSync (fs.js:1067:18)
    at fixWinEPERMSync (...\node_modules\rimraf\rimraf.js:210:13)
    at rimrafSync (...\node_modules\rimraf\rimraf.js:310:28)
    at ...\node_modules\rimraf\rimraf.js:341:5
    at Array.forEach (<anonymous>)
    at rmkidsSync (...\node_modules\rimraf\rimraf.js:340:26)
    at rmdirSync (...\node_modules\rimraf\rimraf.js:333:7)
    at fixWinEPERMSync (...\node_modules\rimraf\rimraf.js:208:5)
    at rimrafSync (...\node_modules\rimraf\rimraf.js:310:28)
    at killChromeAndCleanup (...\node_modules\puppeteer\lib\Launcher.js:103:7)
  errno: -4048,
  code: 'EPERM',
  syscall: 'unlink',
  path: 'c:\\Windows\\Temp\\puppeteer_dev_profile-BzkIJu\\CrashpadMetrics-active.pma' }

我在CrashpadMetrics-active.pma上遇到相同的取消链接错误。

Windows 7 Pro计算机,从昨天开始全新安装了Node 8.4.0和puppeteer 0.9.0。

https://github.com/GoogleChrome/puppeteer/commit/ac109dba6ddaa62a32fe920e864238d41bf22251之后,似乎对我来说已修复(Windows 7 x64)

是的,现在应该修复。

使用木偶戏者默认铬滴注时,我遇到了同样的问题,但我通过使用铬代替了铬来解决了

我正在使用puppeteer提取数据并将其推送到db中,因为数据更多了,我细分了数据并在不同的计算机上运行了多个实例,但随后却遇到了相同的错误。 请帮助@aslushnikov

+1

仅在使用无头false时在puppeteer 5.2.1,节点v12.14.0,windows7上+1

我有一个解决方案,您必须在关闭浏览器之前关闭页面。 当然,如果您打开了更多页面,请关闭所有页面。
await page.close(); await browser.close();

我一直在关闭页面,但是这个问题仅出现在Windows中,所以我使用ubuntu,一切顺利

遇到同样的问题...谁能帮忙看看? 谢谢!

+1无头true / false,等待关闭浏览器没有影响。 Windows 10,节点13.10.0,puppeteer v5.2.1

我只遇到过一次相同的问题,在胜利10,操纵p 4.0.1上似乎是随机的,我认为应该重新打开此错误。

对我来说同样的问题! Windows 10,puppeteer v5.2.1。

同样的问题,无头运行时没有问题。

一样,在Windows 10上发生错误

同样在这里

这里同样的问题。
[错误:EPERM:不允许该操作,请取消链接'C:\ Users \ xxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'] {
errno:-4048,
代码:“ EPERM”,
syscall:'unlink',
路径:'C:\ Users \ xxxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'
}
有人可以向开发团队提出问题吗?

关于这个问题有什么消息吗?

我们仍然可以通过5.2.1获得

在5.3.1上也看到了这一点

我也在5.3.1上得到了这个。

请重新打开此问题。 还在发生。

我有一个解决方案,您必须在关闭浏览器之前关闭页面。 当然,如果您打开了更多页面,请关闭所有页面。
await page.close(); await browser.close();

await browser.close()遇到了问题,但是感谢@ ivangergo3的回答,添加了几行内容来关闭所有页面,从而摆脱了崩溃错误! 😄

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

编辑12/17/2020

  • 修复了下面提到的缺失括号
let pages = await browser.pages()
await Promise.all(pages.map(page =>page.close())
await browser.close()

让页面=等待browser.pages()
await Promise.all(pages.map(page => page.close()))//上面的代码中缺少一个右括号
等待browser.close()

我关闭浏览器之前先关闭所有页面,但仍然看到此问题。 还有其他人吗?

我对铬的倍数开和关有相同的问题,我认为这是并发的

我最终以browser.process().kill('SIGKILL');而不是await browser.close();方式以某种丑陋的方式修复了该问题,此问题再也没有发生。 有什么缺点吗?

是的,缺点是它没有在api中记录,它是
解决方法不是解决方案。 木偶开发团队应该推动修复程序。 谢谢
无论如何要通知:-)

2020年12月18日星期五,06:03 caihongxu [email protected]写道:

我最终通过某种方式来修复它
browser.process()。kill('SIGKILL'); 而不是等待browser.close(); 和
问题再也没有发生。 有什么缺点吗?

-
您收到此邮件是因为您发表了评论。
直接回复此电子邮件,在GitHub上查看
https://github.com/puppeteer/puppeteer/issues/298#issuecomment-747869465
或退订
https://github.com/notifications/unsubscribe-auth/ACLIE5B26YARSKBV22ZNKATSVLPBJANCNFSM4DXFG7VQ

此页面是否有帮助?
0 / 5 - 0 等级