$eval 和 $$eval 在 page/frame/elementHandle 中执行的上下文是什么?

In which context does $eval & $$eval execute in page/frame/elementHandle?

这真让我着迷。我无法访问 $$eval() 中的全局变量,也无法访问其他模块。

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

.......

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

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

$eval 在客户端上下文中计算函数。它被字符串化并用 eval 调用。它无权访问节点 GlobalFlag,因为它不存在于浏览器全局范围内。

$eval$$eval support additional arguments 将传递给评估的函数,以防应该在那里读取变量。为了写入变量,值应该从函数返回并在节点上下文中赋值。

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