【发布时间】:2021-06-29 23:08:01
【问题描述】:
在 Puppeteer 的 evaluate 函数中,我可以访问似乎是预定义的变量,但仅限于函数范围内:
// Excerpt
page.evaluate(() => {
alert("Hello world!!");
});
也没有任何参数传递给函数...
如果它不在evaluate 函数内,我就无法访问所有变量。更有趣的是evaluate里面的代码和外面的代码没有任何关系。
// Excerpt
page.evaluate(() => {
console.log("Hello world!!");
});
以上代码不会在 Node.js 控制台中打印,而是在 Chromium 浏览器中打印。
这是如何工作的,我该如何做?
【问题讨论】:
-
是的,回调被序列化并在浏览器上下文中执行。只需在回调中定义变量,就好像您在浏览器控制台中定义了它们一样。如果您想从 Node 中的控制台访问日志,请参阅How do print the console output of the page in puppeter as it would appear in the browser?。如果您想从 Node 向回调传递数据,请参阅How can I pass variable into an evaluate function?。您从回调返回的任何内容都必须是可序列化的。
-
@ggorlen 不,我没有问题。我已经知道该怎么做了。我在问 Puppeteer 如何为没有任何参数的回调定义变量...
-
你的意思是什么变量?
alert和console.log附加到浏览器的window对象。如果您确实将数据参数传递给回调,Puppeteer 只需在它们上调用一个花哨版本的JSON.stringify,然后一旦它在浏览器上下文中反序列化该函数,它就会在每个参数上调用一个花哨的JSON.parse,并使用项目调用您的回调.见the source。
标签: javascript node.js puppeteer predefined-variables