Кукловод: Как передать объект в page.evaluate? - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь передать свой пользовательский объект в 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://stackoverflow.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);
    };
})();

1 Ответ

5 голосов
/ 15 марта 2019

Вы можете передать объект следующим образом:

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

Помните, что передаваемый вами объект будет сериализован, поэтому круговой объект или функция и т. Д. Не будут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...