Переменная, переданная в page.evaluate, не определена - PullRequest
0 голосов
/ 29 марта 2020

Когда я использую page.evaluate и передаю ему переменные, они не определены.

let reaction;
// First console.log actually logs the string as expected
console.log(reactionTitle);
await this.page.evaluate(function (reactionTitle, reaction) {
    // Second console.log logs undefined in the website's console
    console.log(reactionTitle);
    document.querySelectorAll('span.embedAuthorName-3mnTWj').forEach(s => {
        // Third console.log logs all innerTexts in the website's console
        console.log(s.innerText)
        if (s.innerText == reactionTitle) {
            console.log(s);
            reaction = s.offsetParent.offsetParent.querySelector('.container-1ov-mD').querySelector('.reactions-12N0jA').querySelector('div').querySelector('.reaction-1hd86g').querySelector('.reactionInner-15NvIl');
            console.log(reaction)
        }
    });
}, (reactionTitle, reaction));

console.log(reaction)

Я добавил несколько комментариев в код, чтобы показать, где responseTitle не определен.

1 Ответ

0 голосов
/ 29 марта 2020

Удалите скобки из (reactionTitle, reaction) в аргументах:

await this.page.evaluate((reactionTitle, reaction) => { ... }, reactionTitle, reaction)

или

await this.page.evaluate(({reactionTitle, reaction}) => { ... }, {reactionTitle, reaction})

page.evaluate выполняется в контексте страницы и отдельно от среды выполнения кукловода , Я бы посоветовал взглянуть на документы и архитектуру. Чтобы получить доступ к переменным из контекста страницы в кукловоде, вам нужно вернуть переменные. Обратите внимание, что переменные должны быть сериализуемыми:

const result = await this.page.evaluate(({reactionTitle, reaction}) => { 
    ... 
    return reaction;
}, {reactionTitle, reaction});

Если возвращаемое значение является объектом на странице, используйте evaluateHandle.

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