Javascript 将消息发送到console.log(jest Puppeter)

Javascript 将消息发送到console.log(jest Puppeter),javascript,node.js,jestjs,puppeteer,Javascript,Node.js,Jestjs,Puppeteer,为什么我在控制台上看不到我的消息。登录到page.evaluate,page.$,page.$$,page.$eval,page.$$eval 难道你就不能访问变量吗 let variable = 0; const divColors = await page.evaluate(() => { const divs = Array.from(document.querySelectorAll('.map-filters div')); let text = divs

为什么我在控制台上看不到我的消息。登录到page.evaluate,page.$,page.$$,page.$eval,page.$$eval 难道你就不能访问变量吗

let variable = 0;
const divColors = await page.evaluate(() => {
      const divs = Array.from(document.querySelectorAll('.map-filters div'));
      let text = divs.map((element, index) => {
        console.log(element.textContent)
        variable =1;
        return element.style.color;
      })
      return text;
    })
为什么我不能在本例中使用variable=1和console.logelement.textContent?

您在page.evaluate中使用console.log,因此它将其输出记录到Chromium浏览器,而不是节点输出。要在节点的控制台中查看来自浏览器的控制台消息,需要在创建页面对象之后以及在脚本中使用console.log之前订阅这些消息:

const page = await browser.newPage();

page.on('console', consoleObj => console.log(consoleObj.text()));

page.evaluate(...);
至于变量,实际上在脚本中有两个变量

第一个存在于node.js上下文中:

let variable = 0;
另一个-在网页上下文中:

page.evaluate( () => {
    variable = 1;
})
他们完全不同。将page.evaluate想象成进入另一个世界的门户:存在于其中的对象只存在于javascript运行时内部,位于Puppeter正在驱动的web浏览器中打开的页面上。节点有自己的运行时和自己的对象集

您可以将数据传递到page.evaluate from节点:

您使用的是page.evaluate中的console.log,因此它将其输出记录到Chromium浏览器,而不是节点输出。要在节点的控制台中查看来自浏览器的控制台消息,需要在创建页面对象之后以及在脚本中使用console.log之前订阅这些消息:

const page = await browser.newPage();

page.on('console', consoleObj => console.log(consoleObj.text()));

page.evaluate(...);
至于变量,实际上在脚本中有两个变量

第一个存在于node.js上下文中:

let variable = 0;
另一个-在网页上下文中:

page.evaluate( () => {
    variable = 1;
})
他们完全不同。将page.evaluate想象成进入另一个世界的门户:存在于其中的对象只存在于javascript运行时内部,位于Puppeter正在驱动的web浏览器中打开的页面上。节点有自己的运行时和自己的对象集

您可以将数据传递到page.evaluate from节点:


好的,谢谢你。变量呢?如何使用变量内部求值?如何使用$$eval或$$?我可以将数据传递给它吗?是的,您可以将数据传递给$eval和$$eval,请参阅优秀的木偶师文档:好的,谢谢。变量呢?如何使用变量内部求值?如何使用$$eval或$$?我可以将数据传递给它吗?是的,您可以将数据传递给$eval和$$eval,请参阅优秀的木偶师文档: