Puppeteer page.evaluate 未按预期工作

Nic*_*ter 7 puppeteer

有人可以解释为什么这段代码不起作用。在运行之前我有一个控制台日志,它page.evaluate()记录了我期望的内容,但里面的控制台日志page.evaluate从未运行。

const puppeteer = require('puppeteer');

(async () => {
  try {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.example.com');
    page.on('response', async response => {
      const url = response.url();
      if (url.includes('something')) {
        console.log('this code runs');
        await page.evaluate(() => {
          console.log("this code doesn't run");
        });
      }
    });    
  } catch (err) {
    console.log(err);
  }
})();

Run Code Online (Sandbox Code Playgroud)

小智 10

page.evaluate 内的代码在浏览器上下文中运行,因此 console.log 可以工作,但在 Chrome 控制台而不是 Puppeteer 控制台内运行。

要在 Puppeteer 控制台中显示 Chrome 上下文的日志,您可以在使用 Puppeteer 启动浏览器时将参数中的dumpio设置为 true:

const browser = await puppeteer.launch({
    dumpio: true
})
Run Code Online (Sandbox Code Playgroud)


Nic*_*ter 9

控制台日志不起作用page.evaluate()

https://github.com/GoogleChrome/puppeteer/issues/1944


小智 6

尝试使用此代码显示评估中的 console.log

page.on('console', msg => {
  for (let i = 0; i < msg.args().length; ++i)
    console.log(`${i}: ${msg.args()[i]}`);
});
page.evaluate(() => console.log('hello', 5, {foo: 'bar'}));
Run Code Online (Sandbox Code Playgroud)

https://pptr.dev/#?product=Puppeteer&version=v1.20.0&show=api-event-console