2017-09-13 25 views
2

我怎么能console.log里面的东西在page.evaluate中传递给节点并使用它期间对页面的评价?puppeteer里面page.evaluate

我其实想记录page.evaluate的进度到控制台并向用户显示一些结果。

回答

9

,那么就

const page = await browser.newPage(); 

page.on('console', console.log); 

而且像平常一样在page.evaluate中使用console.log,不再需要依赖关系。

+0

参见[我的回答(https://stackoverflow.com/a/47460782/3931488)为可能的改进 –

+0

如果你想让它看起来完全像一个正常的控制台日志,使用下面列出的改进版本 – jamrizzi

1

实现此代码示例中notifyUi功能:如果你想要的是“日志page.evaluate到控制台的进步”

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); 
1

我喜欢@Vaviloff的回答,但是当您只需要文本时,您将记录整个ConsoleMessage对象。因此,我个人使用下面的:

const EOL = require('os').EOL; 
const _page = await browser.newPage(); 

_page.on('console', _fCleanLog); 

function _fCleanLog(ConsoleMessage) { 
    console.log(ConsoleMessage.text + EOL); 
} 
+1

这是一个很好的举措! – Vaviloff

0
const page = await browser.newPage(); 
page.on('console', ConsoleMessage => console.log(ConsoleMessage.text)); 
1

最简单的方式得到它的工作完全像你期望的

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

很多以前提供的答案,今天不再起作用。还有一件事情在一些页面上可能非常烦人,这是“警告”信息污染了输出。解决这个问题的一种方法是过滤消息的类型。下面的代码有助于降低噪音,并与木偶的当前版本的作品:

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)