Puppeteer: Erro EPERM ao tentar executar o exemplo

Criado em 16 ago. 2017  ·  42Comentários  ·  Fonte: puppeteer/puppeteer

Tentando executar o seguinte 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();
});

Recebi um erro:

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

Durante a depuração deste conjunto DEBUG=* para tentar entender onde as coisas estavam falhando, mas depois de fazer isso, funcionou bem. 😕

A experiência de primeira execução não funciona bem nos modos não DEBUG ? Não tenho certeza, mas foi o que aconteceu comigo!

bug host

Comentários muito úteis

Eu tenho uma solução, você tem que fechar a página antes de fechar o navegador. Claro, se você tiver mais páginas abertas, feche todas elas.
await page.close(); await browser.close();

Estava tendo um problema com await browser.close() mas graças à resposta de @ ivangergo3 , adicionar algumas linhas para fechar todas as páginas

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

Editar 17/12/2020

  • corrigidos os parênteses faltantes mencionados abaixo

Todos 42 comentários

Especulando: você pode ter acidentalmente iniciado o script duas vezes e dois titereiros paralelos tentaram executar o Chrome com a mesma pasta de perfil - .dev_profile1 .

Devemos gerar nomes de pasta de perfil aleatoriamente para que as execuções paralelas do titereiro funcionem bem.

É possível! Parece improvável, pois eu estava iniciando o nó por meio da CLI e não estava fazendo nada diferente além da configuração original de headless : false já que queria ver o navegador. Ele repetia todas as vezes até definir DEBUG , ponto em que tudo começou a funcionar perfeitamente.

+1

Oi,
Recentemente usei apenas com o titereiro, mas ainda assim recebi o mesmo erro. Usei o https://github.com/GoogleChrome/puppeteer/#usage primeiro exemplo de script.

Também tenho encontrado esse problema, embora com um script de exemplo ainda mais simples que apenas inicia o navegador e tenta fechá-lo imediatamente:

const puppeteer = require('puppeteer');

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

  const browser = await puppeteer.launch();

  console.log("Closing browser.");

  browser.close();
})();

Tentei excluir manualmente o diretório node_modules/puppeteer/.dev_profile1 antes de executar este script e o erro ainda ocorre.

Como solução alternativa, descobri que simplesmente chamar process.exit(0) quando eu terminar funciona bem - o titereiro parece ser muito bom em limpar qualquer processo filho do Chromium lançado, mesmo no caso de encerramento inesperado do processo pai, então isso é ótimo!

Eu estava vendo isso nas primeiras vezes que executei a demonstração de uso, mas não entendia todas as vezes. Cerca de dez minutos depois, vejo muito mais sucessos do que erros ao executar o script. Não tenho certeza se isso ajuda ou não.

mesmo problema, windows 10, node v7.10.0, puppeteer 1.0.0. definir DEBUG = * não ajuda, tentei executar 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

mesmo problema, windows 10, node v8.4.0, titereiro 0.9.0

Todos: vocês poderiam verificar se o titereiro da ponta da árvore funciona para vocês? Houve algumas mudanças que podem resolver isso.

Windows 7 x64, Node .js 8.4.0.
Com o titereiro de ponta-de-árvore e o código de exemplo de README.md , agora recebo consistentemente este erro:

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

As pastas de perfil permanecem em c:\Windows\Temp\ .

Cada pasta contém 2 arquivos com um símbolo de cadeado (acesso apenas para sistema e administradores):

DevToolsActivePort
CrashpadMetrics-active.pma

Não tive problemas quando instalei o mais recente. Advertência: usei uma configuração muito diferente da que tinha quando postei sobre este problema. Naquela época, eu estava integrando o Puppeteer em um projeto existente e, depois que recebi o erro algumas vezes, ele simplesmente parou de errar por algum motivo.

No entanto, eu queria fazer um teste a essa atualização. Achei que criar um novo projeto era a maneira mais fácil de testar isso. Criei um novo projeto. Eu instalei com yarn add puppeteer@latest . Executei um arquivo index.js contendo o exemplo leia-me e tudo funcionou bem sempre que o executei. Então ... talvez esteja consertado? Como eu disse, esta foi uma configuração diferente da que eu tinha antes, então não é um experimento terrivelmente 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' }

Estou recebendo o mesmo erro de desvinculação em CrashpadMetrics-active.pma.

Máquina Windows 7 Pro com novas instalações do Node 8.4.0 e do titereiro 0.9.0 de ontem.

Parece estar corrigido para mim (Windows 7 x64) depois de https://github.com/GoogleChrome/puppeteer/commit/ac109dba6ddaa62a32fe920e864238d41bf22251

Sim, deve ser consertado agora.

Eu tive o mesmo problema com a instilação de cromo padrão com o titereiro, mas resolvi usando cromo em vez de cromo

Estou usando o titereiro para extrair dados e colocá-los em um banco de dados, pois os dados são mais. Eu subdividi os dados e executei várias instâncias em computadores diferentes, mas estou recebendo o mesmo erro. Por favor ajude @aslushnikov

+1

+1 no titereiro 5.2.1, nó v12.14.0, windows7 apenas ao usar headless false

Eu tenho uma solução, você tem que fechar a página antes de fechar o navegador. Claro, se você tiver mais páginas abertas, feche todas elas.
await page.close(); await browser.close();

Venho fechando a página, mas esse problema só aparece no windows, então usei o ubuntu e tudo correu bem

Tendo o mesmo problema ... alguém pode ajudar a dar uma olhada? Obrigado!

+1 headless true / false, e esperar o fechamento do navegador não fez diferença. Windows 10, nó 13.10.0, titereiro v5.2.1

Acabei de ter o mesmo problema uma vez, parece ser aleatório na vitória 10, titereiro 4.0.1, acho que este bug deve ser reaberto

O mesmo problema para mim! Windows 10, titereiro v5.2.1.

Mesmo problema, sem problemas ao executar sem cabeça.

Mesmo, o erro acontece no Windows 10

O mesmo aqui

Mesmo problema aqui.
[Erro: EPERM: operação não permitida, desvincular 'C: \ Usuários \ xxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'] {
errno: -4048,
código: 'EPERM',
syscall: 'unlink',
caminho: 'C: \ Users \ xxxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'
}
Alguém pode abrir o problema com a equipe de desenvolvimento?

Alguma notícia sobre o assunto?

Ainda temos isso com 5.2.1

Vendo isso em 5.3.1 também

Estou recebendo isso no 5.3.1 também.

Por favor, reabra este problema. Ainda acontecendo.

Eu tenho uma solução, você tem que fechar a página antes de fechar o navegador. Claro, se você tiver mais páginas abertas, feche todas elas.
await page.close(); await browser.close();

Estava tendo um problema com await browser.close() mas graças à resposta de @ ivangergo3 , adicionar algumas linhas para fechar todas as páginas

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

Editar 17/12/2020

  • corrigidos os parênteses faltantes mencionados abaixo
let pages = await browser.pages()
await Promise.all(pages.map(page =>page.close())
await browser.close()

let pages = await browser.pages ()
esperar Promise.all (pages.map (page => page.close ())) // um colchete de fechamento está faltando no código acima
aguarde browser.close ()

Estou fechando todas as páginas antes de fechar o navegador, mas ainda vejo esse problema. Alguém mais igual?

Eu tenho o mesmo problema com múltiplos cromo aberto e fechado, acho que é simultâneo

Acabei consertando de uma forma um tanto feia fazendo browser.process().kill('SIGKILL'); vez de await browser.close(); E o problema nunca mais aconteceu. Alguma desvantagem disso?

Sim, a desvantagem é que não está documentado na API e é um
solução alternativa não é uma solução. A equipe de desenvolvimento do titereiro deve fazer uma correção. obrigado
de qualquer maneira para o aviso :-)

Na sexta-feira, 18 de dezembro de 2020, 06:03 caihongxu [email protected] escreveu:

Acabei consertando de uma forma um tanto feia fazendo
browser.process (). kill ('SIGKILL'); em vez de esperar browser.close (); E
o problema nunca mais aconteceu. Alguma desvantagem disso?

-
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/puppeteer/puppeteer/issues/298#issuecomment-747869465 ,
ou cancelar
https://github.com/notifications/unsubscribe-auth/ACLIE5B26YARSKBV22ZNKATSVLPBJANCNFSM4DXFG7VQ
.

Esta página foi útil?
0 / 5 - 0 avaliações