将 Class 作为参数传递给 Puppeteer 中的 page.evaluate

yew*_*ang 5 javascript puppeteer

在 Puppeteer 中,page.evaluate如果我将类作为参数传递,则会引发错误。

不过,它适用于常规对象。

是否有一些解决方法可以使其工作?

const puppeteer = require("puppeteer");

(async () => {
let browser = await puppeteer.launch({
    headless: true
});
let page = await browser.newPage();
class SomeClass {
    constructor() {
        this.a = 3;
    }
}
await page.evaluate((SomeClass) => {
    let object = new SomeClass();
    console.log(object.a);
}, SomeClass);
})();
Run Code Online (Sandbox Code Playgroud)

Pau*_*ega 6

如果您尝试传递函数,也会出现类似的问题。我见过有人将函数字符串化以将其传递给 puppeteer 以使其工作,因此在您的情况下,我会使用 eval 来执行此操作。许多人认为 eval 是邪恶的,也许有更好的方法,但至少它是一种可能的解决方法。

class SomeClass {
    constructor() {
        this.a = 3;
    }
}    
await page.evaluate((strSomeClass) => {
    eval("window.SomeClass = " + strSomeClass);
    let object = new SomeClass();
    console.log(object.a);
}, SomeClass.toString());
Run Code Online (Sandbox Code Playgroud)