Puppeteer: Ошибка EPERM при попытке запустить пример

Созданный на 16 авг. 2017  ·  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()

Изменить 17.12.2020

  • исправлены отсутствующие круглые скобки, упомянутые ниже

Все 42 Комментарий

Предполагая: вы могли случайно запустить скрипт дважды, и два параллельных кукловода пытались запустить Chrome с одной и той же папкой профиля - .dev_profile1 .

Мы должны генерировать имена папок профиля случайным образом, чтобы параллельные прогоны кукловода работали нормально.

Возможно! Это кажется маловероятным, поскольку я запускал узел через интерфейс командной строки и не делал ничего другого, кроме первоначальной установки headless : false поскольку я хотел увидеть браузер. Он воспроизводился каждый раз, пока не установил DEBUG , после чего все начало работать отлично.

+1

Привет,
Я только что использовал только с кукольником, но все равно получил ту же ошибку. Я использовал первый пример скрипта 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, node v7.10.0, puppeteer 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, кукловод 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, содержащий пример readme, и все работало нормально каждый раз, когда я его выполнял. Так ... может быть, это исправлено? Как я уже сказал, это была установка, отличная от той, что была у меня раньше, так что это не совсем научный эксперимент.

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.

Кажется, это исправлено для меня (Windows 7 x64) после https://github.com/GoogleChrome/puppeteer/commit/ac109dba6ddaa62a32fe920e864238d41bf22251

Да, это нужно исправить сейчас.

У меня такая же проблема с закапыванием хрома по умолчанию с кукловодом, но я решил, используя хром вместо хрома.

Я использую кукловод для извлечения данных и вставки их в базу данных, поскольку данные больше, я разделил данные и запустил несколько экземпляров на разных компьютерах, но затем я получаю ту же ошибку. Помогите пожалуйста @aslushnikov

+1

+1 на кукольнике 5.2.1, узле v12.14.0, windows7 только при использовании безголового false

У меня есть решение, вы должны закрыть страницу перед закрытием браузера. Конечно, если у вас открыто больше страниц, закройте их все.
await page.close(); await browser.close();

Я закрываю страницу, но эта проблема появляется только в окнах, поэтому я использовал ubuntu, и все прошло гладко

Имея ту же проблему ... может ли кто-нибудь помочь взглянуть? Благодаря!

+1 безголовый истина / ложь, и ожидание закрытия браузера не имело значения. Windows 10, узел 13.10.0, кукловод v5.2.1

Однажды у меня была такая же проблема, похоже, она случайна при победе 10, кукловод 4.0.1, я думаю, что эту ошибку следует открыть повторно

У меня такая же проблема! Windows 10, кукольник v5.2.1.

Та же проблема, никаких проблем при работе без головы.

То же самое, ошибка возникает в Windows 10

То же самое здесь

Та же проблема здесь.
[Ошибка: EPERM: операция не разрешена, отключите 'C: \ Users \ xxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'] {
номер ошибки: -4048,
код: 'EPERM',
системный вызов: 'отсоединить',
путь: '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()

Изменить 17.12.2020

  • исправлены отсутствующие круглые скобки, упомянутые ниже
let pages = await browser.pages()
await Promise.all(pages.map(page =>page.close())
await browser.close()

let pages = ждать browser.pages ()
await Promise.all (pages.map (page => page.close ())) // одна закрывающая скобка отсутствует в приведенном выше коде
ждать browser.close ()

Я закрываю все страницы перед закрытием браузера, но проблема все еще возникает. Кто-нибудь еще такой же?

У меня такая же проблема с несколькими открытыми и закрытыми хромами, я думаю, что это совпадение

Я закончил тем, что исправил это несколько уродливым способом, выполнив browser.process().kill('SIGKILL'); вместо await browser.close(); И проблема больше никогда не повторялась. Есть ли у этого недостатки?

Да, недостаток в том, что это не задокументировано в API, и это
обходной путь не решение. Команда разработчиков кукловода должна внести исправление. благодаря
в любом случае для уведомления :-)

Пт, 18 декабря 2020 г., 06:03 caihongxu [email protected] написал:

В итоге я исправил это несколько уродливым способом, выполнив
browser.process (). kill ('СИГКИЛЛ'); вместо await browser.close (); И
проблема больше никогда не повторялась. Есть ли у этого недостатки?

-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/puppeteer/puppeteer/issues/298#issuecomment-747869465 ,
или отписаться
https://github.com/notifications/unsubscribe-auth/ACLIE5B26YARSKBV22ZNKATSVLPBJANCNFSM4DXFG7VQ
.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги