发送消息到console.log(玩笑的人偶)

时间:2019-05-23 10:06:27

标签: javascript node.js jestjs puppeteer

为什么在page.evaluatepage.$page.$$page.$evalpage.$$eval的console.log上看不到我的消息 而且无法访问变量吗?

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=1console.log(element.textContent)

1 个答案:

答案 0 :(得分:1)

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

const page = await browser.newPage();

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

page.evaluate(...);

对于variable变量,实际上在脚本中有两个。

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

let variable = 0;

另一个-在网页上下文中:

page.evaluate( () => {
    variable = 1;
})

它们是完全不同的。将page.evaluate视为进入另一个世界的门户:存在的对象仅在puppeteer正在驱动的Web浏览器中打开的页面上的javascript运行时中存在。 node有自己的运行时以及自己的对象集。

您可以将数据从page.evaluate传递到node

let variable = 420;

page.evaluate(variable => {

    // it is now passed here from outside
    console.log(variable) 

}, variable);