Puppeteer: 例を実行しようとしたEPERMエラー

作成日 2017年08月16日  ·  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()

2020年12月17日編集

  • 下記の欠落している括弧を修正しました

全てのコメント42件

推測:誤ってスクリプトを2回起動し、2人の並列パペッティアが同じプロファイルフォルダー( .dev_profile1 chromeを実行しようとした可能性があります。

puppeteerの並列実行が正常に機能するように、プロファイルフォルダー名をランダムに生成する必要があります。

それが可能だ! 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)呼び出すだけで問題がないことがわかりました。予期しない親プロセスの終了が発生した場合でも、puppeteerは起動されたChromium子プロセスをクリーンアップするのに非常に便利なようです。素晴らしいです!

使用法のデモを実行した最初の数回はこれを見ていましたが、毎回取得できませんでした。 約10分後、スクリプトの実行エラーよりもはるかに多くの成功が見られます。 それが役立つかどうかはわかりません。

同じ問題、Windows 10、ノードv7.10.0、puppeteer1.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、ノード.js8.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インストールしました。 readmeの例を含む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で同じリンク解除エラーが発生します。

昨日からNode8.4.0とpuppeteer0.9.0が新規インストールされたWindows7Proマシン。

はい、今すぐ修正する必要があります。

パペッティアのデフォルトのクロム注入でも同じ問題が発生しましたが、クロムの代わりにクロムを使用して解決しました

私はpuppeteerを使用してデータを抽出し、それをデータベースにプッシュしています。これは、データがより細分化され、異なるコンピューターで複数のインスタンスを実行しているためですが、同じエラーが発生します。 @aslushnikovを助けてください

+1

ヘッドレスfalseを使用している場合のみ、puppeteer 5.2.1、ノードv12.14.0、windows7で+1

私には解決策があります。ブラウザを閉じる前にページを閉じる必要があります。 もちろん、開いているページが多い場合は、すべて閉じてください。
await page.close(); await browser.close();

私はページを閉じていますが、この問題はウィンドウでのみ発生するため、ubuntuを使用し、すべてがスムーズに進みました

同じ問題を抱えている...誰かが見てみるのを手伝ってくれる? ありがとう!

+1ヘッドレスtrue / false、ブラウザを閉じるのを待つことは何の違いもありませんでした。 Windows 10、ノード13.10.0、puppeteer v5.2.1

私は一度同じ問題を抱えています、それは勝利10、puppeteer 4.0.1でランダムのようです、私はこのバグを再開する必要があると思います

私にとっても同じ問題です! Windows 10、パペッティアv5.2.1。

同じ問題、ヘッドレスで実行しても問題はありません。

同じ、エラーはWindows10で発生します

ここも同じ

ここで同じ問題。
[エラー:EPERM:操作は許可されていません。リンクを解除してください 'C:\ Users \ xxxxxx \ AppData \ Local \ Temp \ 1 \ puppeteer_dev_chrome_profile-sj0wiy \ CrashpadMetrics-active.pma'] {
errno:-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()

2020年12月17日編集

  • 下記の欠落している括弧を修正しました
let pages = await browser.pages()
await Promise.all(pages.map(page =>page.close())
await browser.close()

ページを待つ= browser.pages()を待つ
await Promise.all(pages.map(page => page.close()))//上記のコードに1つの閉じ括弧がありません
browser.close()を待つ

ブラウザを閉じる前にすべてのページを閉じていますが、それでもこの問題が発生します。 他に同じ人はいますか?

私は複数の開閉クロムで同じ問題を抱えています、私はそれが同意だと思います

browser.process().kill('SIGKILL');代わりにawait browser.close(); browser.process().kill('SIGKILL');実行することで、やや醜い方法で修正することになりました。この問題は二度と発生しませんでした。 これの欠点はありますか?

はい、欠点は、APIに文書化されておらず、
回避策は解決策ではありません。 puppeteer開発チームは修正をプッシュする必要があります。 ありがとう
とにかく通知のために:-)

金、2020年12月18日には、午前6時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 評価