ОК, вы на правильном пути, но у вас есть несколько проблем.
Исходя из своего собственного ответа: вы заметили, что журналы консоли выполняются в контексте страницы, когда они выполняются методом evaluate
.Вы правы, говоря это, но вы не правы, говоря, что вы не можете вернуть элементы DOM из метода evaluate
.Вы можете просто сказать, что ваш код не совсем правильный.
Итак, что у вас есть:
.then(function (resp) {
console.log('Website Loaded')
return Page.evaluate(function () {
// Completely Sync Stuff
console.log('Evaluating Selectors')
var myElems = document.getElementsByClassName('challenge-type light')
Result = myElems
})
})
.then(function (val) {
console.log(Result)
console.log('Done! Exiting')
});
Это не сработает, так как вы пытаетесь присвоить myElems
дляResult
переменная внутри метода evaluate
.Метод evaluate
выполняется в браузере. не подозревает , что в вашем скрипте puppeteer
существует переменная Result
.Вот почему ваша переменная выводит как undefined
в конце.
Как решить эту проблему следующим образом:
.then(function () {
return Page.evaluate(function () {
// Return the array of elements from inside the evaluate method
return document.getElementsByClassName('challenge-type light')
});
})
.then(function (elements) {
console.log(elements) // Will be your array of elements
});
Надеюсь, это поможет!