Javascript 为什么console.log in puppeter page.evaluate不起作用?

Javascript 为什么console.log in puppeter page.evaluate不起作用?,javascript,web-scraping,es6-promise,puppeteer,Javascript,Web Scraping,Es6 Promise,Puppeteer,从另一个开发者那里得到了这个函数,我正在调试它。 这是一个基于木偶演员的网页刮板。 但由于某些原因,我无法在内部运行console.log 有人能告诉我我在这里遗漏了什么吗 const getArticles = async (page) => { return await page.evaluate(() => { console.log('in page.evaluate') //not printing anything in the console con

从另一个开发者那里得到了这个函数,我正在调试它。 这是一个基于木偶演员的网页刮板。 但由于某些原因,我无法在内部运行console.log

有人能告诉我我在这里遗漏了什么吗

const getArticles = async (page) => {
  return await page.evaluate(() => {

  console.log('in page.evaluate')
//not printing anything in the console

    const products = document.querySelectorAll(".thumb-link")
    const formated = Array.from(products).map(x => x.href)
    console.log(22, formated)
    return Promise.resolve(formated.filter(x => x))
  });
}

let newArticles = await getArticles(page)


添加以下内容以查看浏览器的控制台日志:

const page=await browser.newPage; page.on'console',msg=>console.logmsg.text;
添加以下内容以查看浏览器的控制台日志:

const page=await browser.newPage; page.on'console',msg=>console.logmsg.text;
它可以工作,但在您的浏览器中。不在节点控制台上。检查你的浏览器控制台,你能在浏览器中找到它吗?是的,我知道,谢谢!它可以工作,但在您的浏览器中。不在节点控制台上。检查你的浏览器控制台,你能在浏览器中找到它吗?是的,我知道,谢谢!很好,很有效!但我不明白的是,如果它在浏览器中,那么我如何执行document.queryselectoral并将结果保存到Node.js中的变量中?@yoni349然后您需要使用它来处理页面对象中的返回。如果只需要将元素带到Nodejs,请使用感谢提供的信息。但“querySelectorAll”实际上是有效的。我得到了一个'JSHandle@array'在'console.log'上。但随后它被解析为我需要的“page.evaluate”中的数据。我实际上是在问最后一条评论,它是如何工作的?如果浏览器中正在运行“page.evaluate”,那么为什么其中的“querySelectorAll”会返回我需要的数据?我想可能是因为在最后,如果我将数据返回到名为“page.evaluate”的对象中,querySelectAll会起作用,因为它是在浏览器上下文中进行计算的。它类似于浏览器控制台。只要数据是可序列化的,就可以使用evaluate从浏览器上下文返回或传递到浏览器上下文。您正在收集的HREF是可序列化的,但实际的元素不是。很好,它可以工作!但我不明白的是,如果它在浏览器中,那么我如何执行document.queryselectoral并将结果保存到Node.js中的变量中?@yoni349然后您需要使用它来处理页面对象中的返回。如果只需要将元素带到Nodejs,请使用感谢提供的信息。但“querySelectorAll”实际上是有效的。我得到了一个'JSHandle@array'在'console.log'上。但随后它被解析为我需要的“page.evaluate”中的数据。我实际上是在问最后一条评论,它是如何工作的?如果浏览器中正在运行“page.evaluate”,那么为什么其中的“querySelectorAll”会返回我需要的数据?我想可能是因为在最后,如果我将数据返回到名为“page.evaluate”的对象中,querySelectAll会起作用,因为它是在浏览器上下文中进行计算的。它类似于浏览器控制台。只要数据是可序列化的,就可以使用evaluate从浏览器上下文返回或传递到浏览器上下文。您正在收集的HREF是可序列化的,但实际的元素不是。