web-dev-qa-db-ja.com

Puppeteerですべてのコンソールメッセージを取得する方法は?エラー、CSP違反、失敗したリソースなどを含む

ブラウザコンソールにエラーがある人形遣いのページを取得していますが、人形のコンソールイベントがすべてのコンソールメッセージによってトリガーされていません。

パペットクロムブラウザーに複数のコンソールメッセージが表示される

multiple console messages

ただし、puppeteerコンソールはノードに1つのことだけを記録します

console logs one thing in node

現在使用しているスクリプトは次のとおりです。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  page.on('console', msg => console.log('PAGE LOG:', msg.text));
  await page.goto('https://pagewithsomeconsoleerrors.com');
  await browser.close();
})();

編集:以下の私のコメントで述べたように、エベレットが推奨したpage.waitFor(5000)コマンドを試してみましたが、うまくいきませんでした。

Edit2:msg.textからスプレッド演算子が削除されました。

Edit3:似ているが異なるスクリーンショットの例でこれに関してgithubで問題を開きました: https://github.com/GoogleChrome/puppeteer/issues/1512

14
Carlos E Silva

すべてをキャッチしたい場合は、複数のリスナーを設定する必要があります。 consoleイベントは、ページ内のJavaScriptがコンソールAPIメッセージ(_console.log_など)を呼び出すと発生します。

コンソールAPIの完全なリストについては、MDNのコンソールのドキュメントをご覧ください。 https://developer.mozilla.org/en-US/docs/Web/API/Console

複数のリスナーが必要な理由は、投稿した画像に記録されているものの一部がpage内で発生しないためです。

したがって、たとえば、イメージの最初のエラーをキャッチするには、_net:: ERR_CONNECTION_REFUSED_リスナーを次のように設定します。page.on('requestfailed', err => console.log(err));

Puppeteerのドキュメントには、イベントの完全なリストが含まれています。使用しているバージョンのドキュメントを参照し、Pageクラスが発行するさまざまなイベントと、それらのイベントが返すものを確認する必要があります。上で書いた例は、Puppeteerのリクエストクラスのインスタンスを返します。

https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-page

10
tjc0090