Puppeteer: EPERM-Fehler beim Versuch, ein Beispiel auszuführen

Erstellt am 16. Aug. 2017  ·  42Kommentare  ·  Quelle: puppeteer/puppeteer

Es wird versucht, den folgenden Code auszuführen:

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

Ich habe eine Fehlermeldung erhalten:

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

Während des Debuggens dieses Sets DEBUG=* , um zu versuchen zu verstehen, wo Dinge fehlgeschlagen sind, aber danach hat es gut funktioniert. 😕

Funktioniert die erste Erfahrung in Nicht- DEBUG -Modi nicht ganz richtig? Ich bin mir nicht sicher, aber genau das ist mir passiert!

bug host

Hilfreichster Kommentar

Ich habe eine Lösung, Sie müssen die Seite schließen, bevor Sie den Browser schließen. Wenn Sie mehr Seiten geöffnet haben, schließen Sie natürlich alle.
await page.close(); await browser.close();

Hatte ein Problem mit await browser.close() aber dank der Antwort von @ ivangergo3 wird durch das Hinzufügen Absturzfehler beseitigt ! 😄

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

Bearbeiten 17.12.2020

  • fehlende Klammern unten behoben

Alle 42 Kommentare

Spekulieren: Möglicherweise haben Sie das Skript versehentlich zweimal gestartet, und zwei parallele Puppenspieler haben versucht, Chrome mit demselben Profilordner auszuführen - .dev_profile1 .

Wir sollten zufällig Profilordnernamen generieren, damit parallele Puppenspielerläufe einwandfrei funktionieren.

Es ist möglich! Scheint jedoch unwahrscheinlich, da ich den Knoten über die CLI gestartet habe und nichts anderes getan habe, als ursprünglich headless : false da ich den Browser sehen wollte. Es wurde jedes Mal wiederholt, bis DEBUG wurde. Zu diesem Zeitpunkt begann alles perfekt zu funktionieren.

+1

Hallo,
Ich habe nur mit Puppenspieler frisch verwendet, aber immer noch den gleichen Fehler. Ich habe das erste Beispielskript https://github.com/GoogleChrome/puppeteer/#usage verwendet .

Ich bin auch auf dieses Problem gestoßen, allerdings mit einem noch einfacheren Beispielskript, das nur den Browser startet und dann sofort versucht, ihn zu schließen:

const puppeteer = require('puppeteer');

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

  const browser = await puppeteer.launch();

  console.log("Closing browser.");

  browser.close();
})();

Ich habe versucht, das Verzeichnis node_modules/puppeteer/.dev_profile1 manuell zu löschen, bevor dieses Skript ausgeführt wurde, und der Fehler tritt weiterhin auf.

Um dieses Problem zu umgehen, habe ich festgestellt, dass es in Ordnung ist, einfach process.exit(0) aufzurufen, wenn ich fertig bin. Puppenspieler scheinen sehr nett zu sein, gestartete untergeordnete Chromium-Prozesse zu bereinigen, selbst im Falle einer unerwarteten Beendigung des übergeordneten Prozesses. Das ist großartig!

Ich habe das die ersten Male gesehen, als ich die Nutzungsdemo ausgeführt habe, aber ich habe es nicht jedes Mal bekommen. Ungefähr zehn Minuten später sehe ich weit mehr Erfolge als Fehler beim Ausführen des Skripts. Ich bin mir nicht sicher, ob das hilft oder nicht.

gleiches Problem, Windows 10, Knoten v7.10.0, Puppenspieler 1.0.0. Das Setzen von DEBUG = * hilft nicht, es wurde versucht, als Administrator ausgeführt zu werden

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

gleiches Problem, Windows 10, Knoten v8.4.0, Puppenspieler 0.9.0

Alle: Könnten Sie bitte überprüfen, ob der Puppenspieler für Sie arbeitet? Es wurden einige Änderungen vorgenommen, die dies beheben könnten.

Windows 7 x64, Knoten .js 8.4.0.
Mit Puppenspieler-Tipp und Beispielcode von README.md erhalte ich jetzt immer wieder den folgenden Fehler:

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

Profilordner verbleiben im c:\Windows\Temp\ .

Jeder Ordner enthält 2 Dateien mit einem Sperrzeichen (Zugriff nur für System- und Administratoren):

DevToolsActivePort
CrashpadMetrics-active.pma

Ich hatte keine Probleme bei der Installation von spätestens. Vorsichtsmaßnahme: Ich habe ein ganz anderes Setup verwendet als bei der Veröffentlichung zu diesem Thema. Zu dieser Zeit habe ich Puppeteer in ein bestehendes Projekt integriert, und nachdem ich den Fehler ein paar Mal erhalten hatte, hörte es aus irgendeinem Grund einfach auf, Fehler zu machen.

Ich wollte dieses Update jedoch testen. Ich dachte, ein neues Projekt zu erstellen wäre der einfachste Weg, dies zu testen. Ich habe ein neues Projekt erstellt. Ich habe mit yarn add puppeteer@latest installiert. Ich habe eine index.js-Datei mit dem Readme-Beispiel ausgeführt, und bei jeder Ausführung hat alles einwandfrei funktioniert. Also ... vielleicht ist es behoben? Wie ich bereits sagte, war dies ein anderes Setup als zuvor, es ist also kein schrecklich wissenschaftliches Experiment.

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

Ich erhalte den gleichen Unlink-Fehler auf CrashpadMetrics-active.pma.

Windows 7 Pro-Computer mit Neuinstallationen von Node 8.4.0 und Puppenspieler 0.9.0 von gestern.

Ja, sollte jetzt behoben werden.

Ich habe das gleiche Problem mit der Standard-Chrominstillation mit Puppenspieler, aber ich habe es gelöst, indem ich Chrom anstelle von Chrom verwendet habe

Ich benutze Puppenspieler, um Daten zu extrahieren und in eine Datenbank zu verschieben, da die Daten mehr sind. Ich habe die Daten unterteilt und mehrere Instanzen auf verschiedenen Computern ausgeführt, aber dann erhalte ich den gleichen Fehler. Bitte helfen Sie @aslushnikov

+1

+1 auf Puppenspieler 5.2.1, Knoten v12.14.0, Windows7 nur bei Verwendung von Headless False

Ich habe eine Lösung, Sie müssen die Seite schließen, bevor Sie den Browser schließen. Wenn Sie mehr Seiten geöffnet haben, schließen Sie natürlich alle.
await page.close(); await browser.close();

Ich habe die Seite geschlossen, aber dieses Problem tritt nur in Windows auf, also habe ich Ubuntu verwendet und alles verlief reibungslos

Das gleiche Problem haben ... kann jemand helfen, einen Blick darauf zu werfen? Vielen Dank!

+1 kopflos wahr / falsch und warten auf das Schließen des Browsers machte keinen Unterschied. Windows 10, Knoten 13.10.0, Puppenspieler v5.2.1

Ich habe das gleiche Problem nur einmal bekommen, es scheint zufällig bei Win 10, Puppenspieler 4.0.1, zu sein. Ich denke, dieser Fehler sollte erneut geöffnet werden

Gleiches Problem für mich! Windows 10, Puppenspieler v5.2.1.

Gleiches Problem, keine Probleme bei kopflosem Betrieb.

Ebenso tritt ein Fehler unter Windows 10 auf

Hier dasselbe

Selbes Problem hier.
]
errno: -4048,
Code: 'EPERM',
syscall: 'Verknüpfung aufheben',
Pfad: 'C: \ Benutzer \ xxxxxxx \ AppData \ Local \ Temp \ 1 \ Puppenspieler_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'
}}
Kann jemand das Problem mit dem Entwicklerteam eröffnen?

Gibt es Neuigkeiten zu diesem Thema?

Wir bekommen dies immer noch mit 5.2.1

Dies auch in 5.3.1 zu sehen

Ich bekomme das auch auf 5.3.1.

Bitte öffnen Sie dieses Problem erneut. Immer noch passiert.

Ich habe eine Lösung, Sie müssen die Seite schließen, bevor Sie den Browser schließen. Wenn Sie mehr Seiten geöffnet haben, schließen Sie natürlich alle.
await page.close(); await browser.close();

Hatte ein Problem mit await browser.close() aber dank der Antwort von @ ivangergo3 wird durch das Hinzufügen Absturzfehler beseitigt ! 😄

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

Bearbeiten 17.12.2020

  • fehlende Klammern unten behoben
let pages = await browser.pages()
await Promise.all(pages.map(page =>page.close())
await browser.close()

let pages = warte auf browser.pages ()
warte auf Promise.all (pages.map (page => page.close ())) // eine schließende Klammer fehlt im obigen Code
warte auf browser.close ()

Ich schließe alle Seiten, bevor ich den Browser schließe, sehe aber immer noch dieses Problem. Ist sonst noch jemand dasselbe?

Ich habe das gleiche Problem mit mehreren offenen und geschlossenen Chrom, ich denke, es ist Übereinstimmung

Am Ende habe ich es auf etwas hässliche Weise behoben, indem ich browser.process().kill('SIGKILL'); anstelle von await browser.close(); Und das Problem ist nie wieder aufgetreten. Irgendwelche Nachteile davon?

Ja, der Nachteil ist, dass es nicht in der API dokumentiert ist und es ist ein
Problemumgehung keine Lösung. Das Puppenspieler-Entwicklerteam sollte eine Lösung finden. Vielen Dank
trotzdem für den hinweis :-)

Am Fr, 18. Dezember 2020, 06:03 schrieb caihongxu [email protected] :

Am Ende habe ich es auf etwas hässliche Weise repariert
browser.process (). kill ('SIGKILL'); anstatt auf browser.close () zu warten; Und
Das Problem trat nie wieder auf. Irgendwelche Nachteile davon?

- -
Sie erhalten dies, weil Sie kommentiert haben.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/puppeteer/puppeteer/issues/298#issuecomment-747869465 ,
oder abbestellen
https://github.com/notifications/unsubscribe-auth/ACLIE5B26YARSKBV22ZNKATSVLPBJANCNFSM4DXFG7VQ
.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

aslushnikov picture aslushnikov  ·  3Kommentare

sradu picture sradu  ·  3Kommentare

MehdiRaash picture MehdiRaash  ·  3Kommentare

bricss picture bricss  ·  3Kommentare

td0m picture td0m  ·  3Kommentare