Puppeteer:如何将对象传递给 page.evaluate?
Puppeteer: How to pass an object to page.evaluate?
我正在尝试将我的自定义对象传递给 page.evaluate()
,但是当我 运行 脚本时它抛出以下错误:
Error: Evaluation failed: TypeError: Cannot read property 'p1' of undefined
。
如何在浏览器上下文中使用自定义对象?
const puppeteer = require('puppeteer');
function obj() {
this.p1 = 'a';
this.p2 = {
p21: 'b'
};
};
(async function () {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://whosebug.com/');
page.on('console', consoleObj => console.log(consoleObj.text()));
const obj1 = new obj();
await page.evaluate((obj1) => {
console.log(obj1.p1);
console.log(obj1.p2.p21);
console.log(obj1.p2.p21);
});
browser.close();
} catch (e) {
console.log(e);
};
})();
您可以像下面这样传递一个对象,
await page.evaluate((obj) => { // <-- use it as parameter of this function
console.log(obj.p1); // <-- use it inside as you wish
console.log(obj.p2.p21);
console.log(obj.p2.p21);
}, obj); //<-- pass it here as argument
记住您传递的对象将被序列化,因此循环对象或函数等将不起作用。
我正在尝试将我的自定义对象传递给 page.evaluate()
,但是当我 运行 脚本时它抛出以下错误:
Error: Evaluation failed: TypeError: Cannot read property 'p1' of undefined
。
如何在浏览器上下文中使用自定义对象?
const puppeteer = require('puppeteer');
function obj() {
this.p1 = 'a';
this.p2 = {
p21: 'b'
};
};
(async function () {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://whosebug.com/');
page.on('console', consoleObj => console.log(consoleObj.text()));
const obj1 = new obj();
await page.evaluate((obj1) => {
console.log(obj1.p1);
console.log(obj1.p2.p21);
console.log(obj1.p2.p21);
});
browser.close();
} catch (e) {
console.log(e);
};
})();
您可以像下面这样传递一个对象,
await page.evaluate((obj) => { // <-- use it as parameter of this function
console.log(obj.p1); // <-- use it inside as you wish
console.log(obj.p2.p21);
console.log(obj.p2.p21);
}, obj); //<-- pass it here as argument
记住您传递的对象将被序列化,因此循环对象或函数等将不起作用。