$ eval和$$ eval在哪种情况下在page / frame / elementHandle中执行?

时间:2018-10-10 18:19:02

标签: javascript node.js google-chrome-devtools puppeteer

这真的让我知道。我无法访问 $$ eval()内部的全局变量,也无法访问其他模块。

const util = require('util');
GlobalFlag=true;

.......

await page.$$eval(selector, (e) => { 
    console.log(e);
    GlobalFlag=false;
    console.log(util.inspect(e));
});

给我错误:评估失败:ReferenceError:未定义实用程序

1 个答案:

答案 0 :(得分:1)

$eval在客户端上下文中评估功能。它被字符串化并用eval调用。它无权访问节点GlobalFlag,因为它在浏览器全局范围中不存在。

$eval$$eval support additional arguments,如果应该在其中读取变量,它们将传递给评估函数。为了写入变量,应从函数中返回值并在Node上下文中进行分配。

GlobalFlag = await page.$$eval(selector, (e) => { 
    console.log(JSON.stringify(e, null, 2));
    return false;
});