Comment puis-je console.log quelque chose dans la page.evaluate, en le passant à noeud et l'utiliser pendant l'évaluation de la page?
Je souhaite réellement enregistrer la progression de la page.evaluate sur la console et afficher certains résultats à l'utilisateur.
** Mise à jour pour fonctionner avec puppeteer v1.4.x
Si tout ce que vous voulez est "enregistrer la progression de la page.évaluer sur la console",
const page = await browser.newPage();
page.on('console', consoleObj => console.log(consoleObj.text()));
Et utilisez console.log
dans page.evaluate
comme d'habitude, aucune autre dépendance n'est requise.
Voir aussi this Nice Tweak pour supprimer plusieurs avertissements gênants du journal.
Le moyen le plus simple de le faire fonctionner exactement comme prévu
const page = await browser.newPage();
page.on('console', (log) => console[log._type](log._text));
Une grande partie des réponses fournies précédemment ne fonctionnent plus aujourd'hui. Une autre chose qui peut être très gênante sur certaines pages est le message "warning" qui pollue la sortie. Une solution consiste à filtrer le type de message. Le code suivant permet de réduire le bruit et fonctionne avec les versions actuelles de Puppeteer:
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on('console', consoleMessageObject => function (consoleMessageObject) {
if (consoleMessageObject._type !== 'warning') {
console.debug(consoleMessageObject._text)
}
});
await page.goto('https://google.com');
const result = await page.evaluate(() => {
console.log('Browser scope.');
return 'Normal scope.';
});
console.log(result)
J'aime la réponse de @ Vaviloff , mais vous enregistrez tout l'objet ConsoleMessage lorsque vous voudrez peut-être simplement afficher le texte. Ainsi, j'utilise personnellement les éléments ci-dessous:
const EOL = require('os').EOL;
const _page = await browser.newPage();
_page.on('console', _fCleanLog);
function _fCleanLog(ConsoleMessage) {
console.log(ConsoleMessage.text + EOL);
}
Implémentez la fonction notifyUi
dans cet exemple de code:
const page = await browser.newPage();
page.on('console', (...args) => {
this.notifyUi('[chrome] ' + args[0]);
});
await page.goto(url);
const result = await page.evaluate(() => {
console.log('I am alive');
return Promise.resolve(true);
});
this.notifyUi('Evaluation returned with ' + result);
const page = await browser.newPage();
page.on('console', ConsoleMessage => console.log(ConsoleMessage.text));