web-dev-qa-db-ja.com

page.evaluate内のPuppeteerログ

Page.evaluate内で何かをconsole.logし、それをノードに渡し、それを使用するにはどうすればよいですか?duringページの評価?

実際には、page.evaluateの進行状況をコンソールに記録し、ユーザーに結果を表示したいと思います。

25

** puppeteer v1.4.xで動作するように更新されました

「page.evaluateの進行状況をコンソールに記録する」だけの場合は、

const page = await browser.newPage();

page.on('console', consoleObj => console.log(consoleObj.text()));

そして、console.log in page.evaluate通常どおり、これ以上の依存関係は必要ありません。

this Nice Tweak も参照して、ログから複数の迷惑な警告を削除してください。

41
Vaviloff

期待どおりに動作する最も簡単な方法

const page = await browser.newPage();
page.on('console', (log) => console[log._type](log._text));
8
Jam Risser

以前に提供された多くの答えは、今日はもはや機能しません。また、一部のページで非常に迷惑なことの1つは、出力を汚染する「警告」メッセージです。これを修正する1つの方法は、メッセージのタイプをフィルタリングすることです。次のコードは、ノイズを減らすのに役立ち、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)
5

@ Vaviloff の回答が好きですが、テキストだけが必要な場合はConsoleMessageオブジェクト全体をログに記録します。したがって、私は個人的に以下を使用します:

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

このコードサンプルでnotifyUi関数を実装します。

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