考虑以下代码:
const puppeteer = require('puppeteer');
const run = async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.facebook.com/pg/fotosdacurva/photos/?tab=albums', { waitUntil: 'networkidle' });
const data = await page.evaluate(() => {
console.log("ola");
const tds = Array.from(document.querySelectorAll('#content_container a'))
return tds.map(td => td.textContent)
});
//console.log(data);
await page.screenshot({ path: 'example.png' });
await browser.close();
};
run();
console.log
内page.evaluate()
函数内的 <div style="text-align:center;background-color: #ffffff;display: inline-block;padding: 10px;-webkit-box-shadow: 3px 3px 3px #9E9E9E;-moz-box-shadow: 3px 3px 3px #9E9E9E;box-shadow: 3px 3px 3px #9E9E9E;">
<div style="display: inline-table;">
<img src="daenerys.png" style="display: block;margin: 0 auto;margin-bottom: 20px;width: 100%;">
<div class="cxl cgy" style="display: table-caption;width: 100%;caption-side: bottom;">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quae necessitatibus architecto quis non error placeat illo enim illum quo corrupti molestias id sint recusandae animi obcaecati, laudantium nostrum fugit eaque.
</div>
</div>
</div>
无效,我无法找出原因?我认为这可能与异步行为有关。该功能正在作为&#34;数据&#34;执行。正在设置变量。
谢谢。
答案 0 :(得分:3)
如果你想收听浏览器的控制台,你可以简单地使用puppeteer的控制台事件。例如,请从docs,
中查看此示例page.on('console', msg => {
for (let i = 0; i < msg.args.length; ++i)
console.log(`${i}: ${msg.args[i]}`);
});
它会做的是,每次有控制台消息时,都会触发一个事件并且它将捕获该事件,并在nodeJS控制台上为您打印消息。
请记住,如果您打印dom元素或数组,原始浏览器控制台将正确打印它,但在nodeJS中,您可能会看到[object Object]或类似的文本。
答案 1 :(得分:1)
您可以在页面上侦听控制台事件,然后写入您自己的控制台:
const page = await browser.newPage();
page.on('console', console.log);
它与console.log()
不完全相同,但它很有帮助。它会为您提供如下所示的输出:
ConsoleMessage {
type: 'log',
text: 'ola',
args:
[ JSHandle {
_context: [Object],
_client: [Object],
_remoteObject: [Object],
_disposed: false } ] }
https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#event-console
答案 2 :(得分:0)
在 2021 年,您需要使用 async await
从 JSHandle
对象获取参数。如果您生成 Promise.all(args)
并且下次尝试对 executionContext
的 JSHandle
求值,它将显示 consoleMessage
的对象。
在这种情况下,请查看我的完整答案https://stackoverflow.com/a/66801550/9026103