Page.evaluate内で何かをconsole.logし、それをノードに渡し、それを使用するにはどうすればよいですか?duringページの評価?
実際には、page.evaluateの進行状況をコンソールに記録し、ユーザーに結果を表示したいと思います。
** 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 も参照して、ログから複数の迷惑な警告を削除してください。
期待どおりに動作する最も簡単な方法
const page = await browser.newPage();
page.on('console', (log) => console[log._type](log._text));
以前に提供された多くの答えは、今日はもはや機能しません。また、一部のページで非常に迷惑なことの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)
@ Vaviloff の回答が好きですが、テキストだけが必要な場合はConsoleMessageオブジェクト全体をログに記録します。したがって、私は個人的に以下を使用します:
const EOL = require('os').EOL;
const _page = await browser.newPage();
_page.on('console', _fCleanLog);
function _fCleanLog(ConsoleMessage) {
console.log(ConsoleMessage.text + EOL);
}
このコードサンプルで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);
const page = await browser.newPage();
page.on('console', ConsoleMessage => console.log(ConsoleMessage.text));