Puppeteer: Error de EPERM al intentar ejecutar el ejemplo

Creado en 16 ago. 2017  ·  42Comentarios  ·  Fuente: puppeteer/puppeteer

Intentando ejecutar el siguiente código:

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

Tengo un error:

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

En el curso de la depuración, establezca DEBUG=* para tratar de comprender dónde estaban fallando las cosas, pero después de hacerlo, funcionó bien. 😕

¿La experiencia de primera ejecución no funciona bien en modos que no son DEBUG ? No estoy seguro, ¡pero eso es lo que me pasó!

bug host

Comentario más útil

Tengo una solución, tienes que cerrar la página antes de cerrar el navegador. Por supuesto, si tiene más páginas abiertas, ciérrelas todas.
await page.close(); await browser.close();

Estaba teniendo un problema con await browser.close() pero gracias a la respuesta de @ ivangergo3, ¡agregar un par de líneas para cerrar todas las páginas elimina el error de bloqueo! 😄

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

Editar 17/12/2020

  • Se corrigieron los paréntesis faltantes mencionados a continuación

Todos 42 comentarios

Especulación: es posible que haya lanzado accidentalmente el script dos veces y dos titiriteros paralelos intentaron ejecutar Chrome con la misma carpeta de perfil: .dev_profile1 .

Deberíamos generar nombres de carpetas de perfil al azar para que las ejecuciones paralelas de titiritero funcionen bien.

¡Es posible! Sin embargo, parece poco probable, ya que estaba iniciando el nodo a través de la CLI y no estaba haciendo nada diferente más allá de configurar originalmente headless : false ya que quería ver el navegador. Se reproducía cada vez hasta configurar DEBUG , momento en el que todo comenzó a funcionar perfectamente.

+1

Hola,
Recién usé solo con titiritero, pero aún así obtuve el mismo error. Usé el primer script de ejemplo

También me he encontrado con este problema, aunque con un script de ejemplo aún más simple que simplemente inicia el navegador y luego intenta cerrarlo inmediatamente:

const puppeteer = require('puppeteer');

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

  const browser = await puppeteer.launch();

  console.log("Closing browser.");

  browser.close();
})();

Intenté eliminar manualmente el directorio node_modules/puppeteer/.dev_profile1 antes de ejecutar este script, y el error aún se produce.

Como solución alternativa, descubrí que simplemente llamar a process.exit(0) cuando termine funciona bien: el titiritero parece ser muy amable al limpiar cualquier proceso secundario de Chromium iniciado, incluso en el caso de una terminación inesperada del proceso principal, ¡eso es genial!

Estaba viendo esto las primeras veces que ejecuté la demostración de uso, pero no lo obtuve todas las veces. Aproximadamente diez minutos después, veo muchos más éxitos que errores al ejecutar el script. No estoy seguro de si eso ayuda o no.

mismo problema, windows 10, nodo v7.10.0, titiritero 1.0.0. configurar DEBUG = * no ayuda, intenté ejecutar como administrador

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

mismo problema, Windows 10, nodo v8.4.0, titiritero 0.9.0

Todos: ¿podrían comprobar si el titiritero de punta de árbol funciona para usted? Ha habido algunos cambios que podrían solucionar este problema.

Windows 7 x64, Node .js 8.4.0.
Con titiritero de punta de árbol y código de ejemplo de README.md , ahora constantemente obtengo este error:

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

Las carpetas de perfil permanecen en c:\Windows\Temp\ .

Cada carpeta contiene 2 archivos con un letrero de bloqueo (acceso solo para el sistema y los administradores):

DevToolsActivePort
CrashpadMetrics-active.pma

No tuve ningún problema cuando instalé desde la última versión. Advertencia: utilicé una configuración muy diferente a la que tenía cuando publiqué este problema. En ese momento, estaba integrando Puppeteer en un proyecto existente, y después de recibir el error un par de veces, simplemente dejó de tener errores por alguna razón.

Sin embargo, quería probar esta actualización. Pensé que crear un nuevo proyecto era la forma más fácil de probar esto. Creé un nuevo proyecto. Lo instalé con yarn add puppeteer@latest . Ejecuté un archivo index.js que contenía el ejemplo Léame, y todo funcionó bien cada vez que lo ejecuté. Entonces ... ¿tal vez esté arreglado? Como dije, esta era una configuración diferente a la que tenía antes, por lo que no es un experimento terriblemente científico.

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

Recibo el mismo error de desvinculación en CrashpadMetrics-active.pma.

Máquina con Windows 7 Pro con nuevas instalaciones de Node 8.4.0 y puppeteer 0.9.0 de ayer.

Parece que se ha solucionado para mí (Windows 7 x64) después de https://github.com/GoogleChrome/puppeteer/commit/ac109dba6ddaa62a32fe920e864238d41bf22251

Sí, debería arreglarse ahora.

Tuve el mismo problema con la instilación predeterminada de cromo con titiritero, pero lo resolví usando cromo en lugar del cromo

Estoy usando titiritero para extraer datos y enviarlos a una base de datos, ya que los datos son más, subdividí los datos y ejecuté varias instancias en diferentes computadoras, pero luego obtengo el mismo error. Por favor ayuda @aslushnikov

+1

+1 en titiritero 5.2.1, nodo v12.14.0, windows7 solo cuando se usa falso sin cabeza

Tengo una solución, tienes que cerrar la página antes de cerrar el navegador. Por supuesto, si tiene más páginas abiertas, ciérrelas todas.
await page.close(); await browser.close();

He estado cerrando la página, pero este problema aparece solo en Windows, así que usé ubuntu y todo salió bien

Tener el mismo problema ... ¿alguien puede ayudar a echar un vistazo? ¡Gracias!

+1 sin cabeza verdadero / falso, y esperar a cerrar el navegador no hizo ninguna diferencia. Windows 10, nodo 13.10.0, titiritero v5.2.1

Recibí el mismo problema una vez, parece ser aleatorio en win 10, titiritero 4.0.1, creo que este error debería reabrirse

¡El mismo problema para mí! Windows 10, titiritero v5.2.1.

El mismo problema, sin problemas cuando se ejecuta sin cabeza.

Igual, ocurre un error en Windows 10

Mismo por aquí

El mismo problema aqui.
[Error: EPERM: operación no permitida, desvincular 'C: \ Users \ xxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'] {
errno: -4048,
código: 'EPERM',
syscall: 'desvincular',
ruta: 'C: \ Users \ xxxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'
}
¿Alguien puede abrir el problema con el equipo de desarrollo?

¿Alguna noticia sobre el tema?

Todavía obtenemos esto con 5.2.1

Viendo esto también en 5.3.1

También obtengo esto en 5.3.1.

Por favor, vuelva a abrir este problema. Sigue pasando.

Tengo una solución, tienes que cerrar la página antes de cerrar el navegador. Por supuesto, si tiene más páginas abiertas, ciérrelas todas.
await page.close(); await browser.close();

Estaba teniendo un problema con await browser.close() pero gracias a la respuesta de @ ivangergo3, ¡agregar un par de líneas para cerrar todas las páginas elimina el error de bloqueo! 😄

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

Editar 17/12/2020

  • Se corrigieron los paréntesis faltantes mencionados a continuación
let pages = await browser.pages()
await Promise.all(pages.map(page =>page.close())
await browser.close()

deja que las páginas = aguardan browser.pages ()
await Promise.all (pages.map (page => page.close ())) // falta un corchete de cierre en el código anterior
aguardar browser.close ()

Estoy cerrando todas las páginas antes de cerrar el navegador, pero sigo viendo este problema. ¿Alguien más igual?

tengo el mismo problema con múltiples cromo abierto y cerrado, creo que es concurrencia

Terminé arreglándolo de una manera algo fea haciendo browser.process().kill('SIGKILL'); lugar de await browser.close(); Y el problema nunca volvió a suceder. ¿Algún inconveniente de esto?

Sí, el inconveniente es que no está documentado en la API y es un
la solución no es una solución. El equipo de desarrollo titiritero debería impulsar una solución. Gracias
de todos modos para el aviso :-)

El viernes 18 de diciembre de 2020 a las 06:03 caihongxu [email protected] escribió:

Terminé arreglándolo de una manera algo fea al hacer
browser.process (). kill ('SIGKILL'); en lugar de esperar browser.close (); Y
el problema nunca volvió a suceder. ¿Algún inconveniente de esto?

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/puppeteer/puppeteer/issues/298#issuecomment-747869465 ,
o darse de baja
https://github.com/notifications/unsubscribe-auth/ACLIE5B26YARSKBV22ZNKATSVLPBJANCNFSM4DXFG7VQ
.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

ryanvincent29 picture ryanvincent29  ·  3Comentarios

bricss picture bricss  ·  3Comentarios

sheweichun picture sheweichun  ·  3Comentarios

td0m picture td0m  ·  3Comentarios

denniscieri picture denniscieri  ·  3Comentarios