1

在 Puppeteer 的evaluate函数中,我可以访问似乎是预定义的变量,但仅限于函数范围内:

// Excerpt
page.evaluate(() => {
  alert("Hello world!!");
});

也没有任何参数传递给函数......

而如果它不在evaluate函数内部,我就无法访问所有变量。更有趣的是,里面evaluate的代码和外面的代码没有任何关系。

// Excerpt
page.evaluate(() => {
  console.log("Hello world!!");
});

上面的代码不会在 Node.js 控制台中打印,而是在 Chromium 浏览器中打印。

这是如何工作的,我该怎么做?

4

1 回答 1

1

Puppeteer 使用Function构造函数包装您的函数Function#toString,然后在自定义上下文中对其进行评估,如下所示:

let functionText = evaluateFunc.toString();

let newFunc = new Function(`
function alert() {...}

(${functionText})
`);

newFunc();

因此,函数之外的变量、函数等是不可访问的。

如果您想在evaluate函数内部传递参数,请参阅如何将变量传递给评估函数?

于 2021-06-29T23:51:54.980 回答