Puppeteer: Erreur EPERM lors de la tentative d'exécution de l'exemple

Créé le 16 août 2017  ·  42Commentaires  ·  Source: puppeteer/puppeteer

Essayer d'exécuter le code suivant:

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();
});

J'ai une erreur:

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

Au cours du débogage, cet ensemble DEBUG=* pour essayer de comprendre où les choses échouaient, mais après cela, cela a bien fonctionné. 😕

L'expérience de première exécution ne fonctionne-t-elle pas correctement dans les modes autres que DEBUG ? Je ne suis pas sûr, mais c'est ce qui m'est arrivé!

bug host

Commentaire le plus utile

J'ai une solution, vous devez fermer la page avant de fermer le navigateur. Bien sûr, si vous avez plus de pages ouvertes, fermez-les toutes.
await page.close(); await browser.close();

J'avais un problème avec await browser.close() mais grâce à la réponse de @ ivangergo3 , l'ajout de quelques lignes pour fermer toutes les pages

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

Modifier 17/12/2020

  • correction des parenthèses manquantes mentionnées ci-dessous

Tous les 42 commentaires

Spéculation: vous pourriez avoir accidentellement lancé le script deux fois, et deux marionnettistes parallèles ont essayé d'exécuter chrome avec le même dossier de profil - .dev_profile1 .

Nous devons générer des noms de dossier de profil au hasard afin que les exécutions parallèles de marionnettiste fonctionnent correctement.

C'est possible! Cela semble peu probable car je lançais le nœud via la CLI et je ne faisais rien de différent au-delà de la configuration initiale de headless : false puisque je voulais voir le navigateur. Il reprochait à chaque fois jusqu'au réglage de DEBUG , auquel point tout a commencé à fonctionner parfaitement.

+1

Salut,
J'ai récemment utilisé avec seulement le marionnettiste, mais j'ai toujours la même erreur. J'ai utilisé le https://github.com/GoogleChrome/puppeteer/#usage premier exemple de script.

J'ai également rencontré ce problème, mais avec un exemple de script encore plus simple qui lance simplement le navigateur, puis essaie immédiatement de le fermer:

const puppeteer = require('puppeteer');

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

  const browser = await puppeteer.launch();

  console.log("Closing browser.");

  browser.close();
})();

J'ai essayé de supprimer manuellement le répertoire node_modules/puppeteer/.dev_profile1 avant d'exécuter ce script, et l'erreur se produit toujours.

Pour contourner le problème, j'ai trouvé que le simple fait d'appeler process.exit(0) lorsque j'ai terminé fonctionne bien - le marionnettiste semble être très gentil pour nettoyer tous les processus enfants Chromium lancés, même en cas d'arrêt inattendu du processus parent, alors c'est super!

Je voyais cela les deux premières fois où j'ai lancé la démo d'utilisation, mais je ne l'ai pas reçue à chaque fois. Environ dix minutes plus tard, je constate bien plus de succès que d'erreurs lors de l'exécution du script. Je ne sais pas si cela aide ou non.

même problème, Windows 10, nœud v7.10.0, marionnettiste 1.0.0. réglage DEBUG = * n'aide pas, a essayé de s'exécuter en tant qu'administrateur

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

même problème, windows 10, nœud v8.4.0, marionnettiste 0.9.0

Tout le monde: pourriez-vous s'il vous plaît vérifier si le marionnettiste de la pointe de l'arbre fonctionne pour vous? Il y a eu des changements qui pourraient résoudre ce problème.

Windows 7 x64, Node .js 8.4.0.
Avec le marionnettiste de la pointe de l'arbre et l'exemple de code de README.md , j'obtiens maintenant systématiquement cette erreur:

(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.

Les dossiers de profil restent dans le c:\Windows\Temp\ .

Chaque dossier contient 2 fichiers avec un signe de verrouillage (accès pour le système et les administrateurs uniquement):

DevToolsActivePort
CrashpadMetrics-active.pma

Je n'ai eu aucun problème lors de l'installation de la dernière version. Mise en garde: j'ai utilisé une configuration très différente de celle que j'avais lorsque j'ai publié sur ce problème. À ce moment-là, j'intégrais Puppeteer dans un projet existant, et après avoir reçu l'erreur plusieurs fois, il a cessé de faire des erreurs pour une raison quelconque.

Cependant, je voulais tester cette mise à jour. J'ai pensé que créer un nouveau projet était le moyen le plus simple de tester cela. J'ai créé un nouveau projet. J'ai installé avec yarn add puppeteer@latest . J'ai exécuté un fichier index.js contenant l'exemple readme, et tout fonctionnait parfaitement à chaque fois que je l'exécutais. Alors ... c'est peut-être réglé? Comme je l'ai dit, c'était une configuration différente de ce que j'avais avant, donc ce n'est pas une expérience terriblement scientifique.

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' }

J'obtiens la même erreur de dissociation sur CrashpadMetrics-active.pma.

Machine Windows 7 Pro avec de nouvelles installations de Node 8.4.0 et de marionnettiste 0.9.0 d'hier.

Oui, devrait être corrigé maintenant.

J'ai le même problème avec l'instillation de chrome par défaut avec le marionnettiste mais j'ai résolu en utilisant du chrome au lieu du chrome

J'utilise marionnettiste pour extraire des données et les pousser dans une base de données, car les données sont plus subdivisées et exécutant plusieurs instances dans différents ordinateurs, mais j'obtiens la même erreur. Veuillez aider @aslushnikov

+1

+1 sur puppeteer 5.2.1, node v12.14.0, windows7 uniquement lors de l'utilisation de faux sans tête

J'ai une solution, vous devez fermer la page avant de fermer le navigateur. Bien sûr, si vous avez plus de pages ouvertes, fermez-les toutes.
await page.close(); await browser.close();

J'ai fermé la page, mais ce problème n'apparaît que dans Windows, j'ai donc utilisé ubuntu et tout s'est bien passé

Ayant le même problème ... quelqu'un peut-il aider à jeter un coup d'œil? Merci!

+1 sans tête vrai / faux, et attendre la fermeture du navigateur n'a fait aucune différence. Windows 10, nœud 13.10.0, marionnettiste v5.2.1

Je viens de recevoir le même problème une fois, il semble être aléatoire sur win 10, puppeteer 4.0.1, je pense que ce bug devrait être rouvert

Même problème pour moi! Windows 10, marionnettiste v5.2.1.

Même problème, pas de problèmes lors de l'exécution sans tête.

Idem, une erreur se produit sur Windows 10

Même ici

Même problème ici.
[Erreur: EPERM: opération non autorisée, dissocier 'C: \ Users \ xxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'] {
numéro d'erreur: -4048,
code: 'EPERM',
syscall: 'dissocier',
chemin: 'C: \ Users \ xxxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'
}
Quelqu'un peut-il ouvrir le problème avec l'équipe de développement?

Des nouvelles concernant le problème?

Nous obtenons toujours cela avec la version 5.2.1

Voir cela aussi sur 5.3.1

J'obtiens également ceci sur 5.3.1.

Veuillez rouvrir ce numéro. Toujours en cours.

J'ai une solution, vous devez fermer la page avant de fermer le navigateur. Bien sûr, si vous avez plus de pages ouvertes, fermez-les toutes.
await page.close(); await browser.close();

J'avais un problème avec await browser.close() mais grâce à la réponse de @ ivangergo3 , l'ajout de quelques lignes pour fermer toutes les pages

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

Modifier 17/12/2020

  • correction des parenthèses manquantes mentionnées ci-dessous
let pages = await browser.pages()
await Promise.all(pages.map(page =>page.close())
await browser.close()

let pages = attendre browser.pages ()
attendre Promise.all (pages.map (page => page.close ())) // il manque un crochet fermant dans le code ci-dessus
attendre browser.close ()

Je ferme toutes les pages avant de fermer le navigateur, mais je vois toujours ce problème. Quelqu'un d'autre est-il pareil?

j'ai le même problème avec les multiples chrome ouvert et fermé, je pense que c'est la concurrence

J'ai fini par le réparer d'une manière un peu moche en faisant browser.process().kill('SIGKILL'); au lieu de await browser.close(); Et le problème ne s'est plus jamais produit. Y a-t-il des inconvénients à cela?

Oui, l'inconvénient est que ce n'est pas documenté dans l'API et que c'est un
solution de contournement pas une solution. L'équipe de développement des marionnettistes devrait proposer un correctif. Merci
en tout cas pour l'avis :-)

Le ven 18 décembre 2020 06:03 caihongxu [email protected] a écrit:

J'ai fini par le réparer d'une manière un peu moche en faisant
browser.process (). kill ('SIGKILL'); au lieu d'attendre browser.close (); Et
le problème ne s'est plus jamais produit. Y a-t-il des inconvénients à cela?

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/puppeteer/puppeteer/issues/298#issuecomment-747869465 ,
ou se désinscrire
https://github.com/notifications/unsubscribe-auth/ACLIE5B26YARSKBV22ZNKATSVLPBJANCNFSM4DXFG7VQ
.

Cette page vous a été utile?
0 / 5 - 0 notes