web-dev-qa-db-fra.com

Journal des marionnettistes dans page.evaluer

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. 

15
Alex Arvanitidis

** 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.

23
Vaviloff

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));
5
Jam Risser

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)
3

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);
}
2
John Vandivier

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);
2
Paul
const page = await browser.newPage();
page.on('console', ConsoleMessage => console.log(ConsoleMessage.text));
0
E. Fortes