In Puppeteer's evaluate function, I can access variables that seem to be predefined, but only in the scope of the function:
// Excerpt
page.evaluate(() => {
alert("Hello world!!");
});
There aren't any parameters that get passed into the function either...
Whereas if it wasn't inside the evaluate function, I can't access all the variables. What's even more interesting is that the code inside evaluate has nothing to do with the code outside of it.
// Excerpt
page.evaluate(() => {
console.log("Hello world!!");
});
The above code does not print inside the Node.js console, but rather in the Chromium browser.
How does this work and how can I do it too?
Puppeteer wraps your function using
Functionconstructor andFunction#toStringand then evaluate it in the custom context, like this:Therefore variables, functions, etc. outside of the function isn't accessible.
If you want to pass arguments inside
evaluatefunction, see How can I pass variable into an evaluate function?