web-dev-qa-db-fra.com

Comment obtenir tous les messages de la console avec le marionnettiste? y compris les erreurs, les violations CSP, les ressources défaillantes, etc.

Je récupère une page avec un marionnettiste qui contient des erreurs dans la console du navigateur, mais l'événement console du marionnettiste n'est pas déclenché par tous les messages de la console.

Le navigateur de marionnettiste Chrome affiche plusieurs messages sur la console

multiple console messages

Cependant, le marionnettiste console uniquement enregistre une chose dans le nœud

console logs one thing in node

Voici le script que j'utilise actuellement:

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();
})();

Edit: Comme indiqué dans mon commentaire ci-dessous, j'ai essayé la commande page.waitFor (5000) que Everettss a recommandée mais qui n'a pas fonctionné.

Edit2: suppression de l'opérateur d'étalement de msg.text comme par hasard.

Edit3: J'ai ouvert un problème sur github à ce sujet avec des exemples de captures d'écran similaires mais différents: https://github.com/GoogleChrome/puppeteer/issues/1512

14
Carlos E Silva

Vous devez définir plusieurs écouteurs si vous voulez tout capturer. L'événement console est émis lorsque javascript dans la page appelle un message API de console (comme console.log).

Pour une liste complète de l'API de la console, jetez un œil aux documents pour la console sur MDN: https://developer.mozilla.org/en-US/docs/Web/API/Console

La raison pour laquelle vous avez besoin de plusieurs écouteurs est qu'une partie de ce qui est enregistré dans l'image que vous avez publiée ne se produit pas dans la page .

Ainsi, par exemple, pour intercepter la première erreur dans l'image, net:: ERR_CONNECTION_REFUSED, Vous devez définir l'écouteur comme suit: page.on('requestfailed', err => console.log(err));

La documentation de Puppeteer contient une liste complète des événements. Vous devriez jeter un oeil à la documentation de la version que vous utilisez et regarder les différents événements que la classe Page émettra ainsi que ce que ces événements retourneront. L'exemple que j'ai écrit ci-dessus retournera une instance de la classe de demande de Puppeteer.

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

10
tjc0090