Puppeteer: حاول خطأ EPERM تشغيل المثال

تم إنشاؤها على ١٦ أغسطس ٢٠١٧  ·  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()

تحرير 12/17/2020

  • إصلاح الأقواس المفقودة المذكورة أدناه

ال 42 كومينتر

التخمين: ربما تكون قد أطلقت البرنامج النصي عن طريق الخطأ مرتين ، وحاول اثنان من محرّكي الدمى المتوازيين تشغيل chrome بنفس مجلد الملف الشخصي - .dev_profile1 .

يجب أن ننشئ أسماء مجلدات ملف التعريف بشكل عشوائي حتى تعمل عمليات التشغيل المتوازية لمحرك الدمى بشكل جيد.

انه ممكن! يبدو من غير المحتمل على الرغم من أنني كنت أقوم بتشغيل العقدة عبر CLI ولم أفعل أي شيء مختلف بخلاف الإعداد الأصلي 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 الفرعية التي تم إطلاقها حتى في حالة إنهاء عملية الوالدين غير المتوقعة ، لذلك هذا رائع!

كنت أشاهد هذا في المرات القليلة الأولى التي قمت فيها بتشغيل العرض التوضيحي للاستخدام ، لكنني لم أحصل عليه في كل مرة. بعد حوالي عشر دقائق ، أرى نجاحات أكثر بكثير من الأخطاء في تشغيل البرنامج النصي. لست متأكدًا مما إذا كان ذلك يساعد أم لا.

نفس المشكلة ، ويندوز 10 ، العقدة v7.10.0 ، محرك الدمى 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

نفس المشكلة ، ويندوز 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\ .

يحتوي كل مجلد على ملفين بعلامة قفل (وصول للنظام والمسؤولين فقط):

DevToolsActivePort
CrashpadMetrics-active.pma

لم يكن لدي أي مشاكل عندما قمت بالتثبيت من الأحدث. تحذير: لقد استخدمت إعدادًا مختلفًا تمامًا عما كان لدي عندما نشرت حول هذه المشكلة. في ذلك الوقت ، كنت أدمج Puppeteer في مشروع موجود ، وبعد أن تلقيت الخطأ عدة مرات ، توقف عن الخطأ لسبب ما.

ومع ذلك ، أردت إجراء اختبار لهذا التحديث. اعتقدت أن إنشاء مشروع جديد كان أسهل طريقة لاختبار ذلك. لقد أنشأت مشروعًا جديدًا. لقد قمت بالتثبيت بـ yarn add puppeteer@latest . قمت بتشغيل ملف index.js يحتوي على المثال التمهيدي ، وكان كل شيء يعمل بشكل جيد في كل مرة أنفذ فيها. إذن ... ربما تم إصلاحه؟ كما قلت ، كان هذا إعدادًا مختلفًا عما كان لدي من قبل ، لذا فهي ليست تجربة علمية رهيبة.

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 ومحرك الدمى 0.9.0 من الأمس.

يبدو أنه تم إصلاحه بالنسبة لي (Windows 7 x64) بعد https://github.com/GoogleChrome/puppeteer/commit/ac109dba6ddaa62a32fe920e864238d41bf22251

نعم ، يجب إصلاحه الآن.

لدي نفس المشكلة مع تقطير الكروم الافتراضي مع محرك العرائس لكني قمت بحلها باستخدام الكروم بدلاً من الكروم

أنا أستخدم محرك الدمى لاستخراج البيانات ودفعها إلى ديسيبل نظرًا لأن البيانات أكثر تقسيمًا فرعيًا للبيانات وتشغيل مثيلات متعددة في أجهزة كمبيوتر مختلفة ولكن بعد ذلك أتلقى نفس الخطأ. الرجاء المساعدة aslushnikov

+1

+1 على محرك الدمى 5.2.1 ، العقدة v12.14.0 ، windows7 فقط عند استخدام خطأ مقطوع الرأس

لدي حل ، عليك إغلاق الصفحة قبل إغلاق المتصفح. بالطبع إذا كان لديك المزيد من الصفحات المفتوحة ، فأغلقها جميعًا.
await page.close(); await browser.close();

لقد قمت بإغلاق الصفحة ، ولكن هذه المشكلة تظهر فقط في windows لذلك استخدمت أوبونتو وسار كل شيء بسلاسة

تواجه نفس المشكلة ... هل يمكن لأي شخص المساعدة في إلقاء نظرة؟ شكر!

+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'] {
errno: -4048 ،
الكود: "EPERM" ،
syscall: "إلغاء الارتباط" ،
المسار: "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()

تحرير 12/17/2020

  • إصلاح الأقواس المفقودة المذكورة أدناه
let pages = await browser.pages()
await Promise.all(pages.map(page =>page.close())
await browser.close()

السماح للصفحات = انتظار browser.pages ()
الانتظار Promise.all (pages.map (page => page.close ())) // قوس إغلاق واحد مفقود في الكود أعلاه
في انتظار المتصفح .close ()

أقوم بإغلاق جميع الصفحات قبل إغلاق المتصفح ، ولكن ما زلت أرى هذه المشكلة. أي شخص آخر نفس الشيء؟

لدي نفس المشكلة مع الكروم لفتح وإغلاق المضاعفات ، أعتقد أنه توافق

انتهى بي الأمر إلى إصلاحه بطريقة قبيحة إلى حد ما عن طريق القيام بـ browser.process().kill('SIGKILL'); بدلاً من await browser.close(); ولم تحدث المشكلة مرة أخرى. أي عيوب من هذا؟

نعم العيب هو أنه لم يتم توثيقه في api وهو ملف
الحل ليس حلا. يجب على فريق مطوري محرك الدمى دفع الإصلاح. شكر
على أي حال للإشعار :-)

في الجمعة ، 18 ديسمبر 2020 ، 06:03 كتب caihongxu [email protected] :

انتهى بي الأمر إلى إصلاحه بطريقة قبيحة إلى حد ما من خلال القيام بذلك
browser.process (). kill ('SIGKILL') ؛ بدلاً من انتظار browser.close () ؛ و
لم تحدث القضية مرة أخرى. أي عيوب من هذا؟

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/puppeteer/puppeteer/issues/298#issuecomment-747869465 ،
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/ACLIE5B26YARSKBV22ZNKATSVLPBJANCNFSM4DXFG7VQ
.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات