J'essaie d'obtenir une valeur de l'intérieur page.evaluate()
Corps dans mon grattoir YouTube que j'ai construit à l'aide de marionnettiste. Je suis incapable de retourner le résultat de page.evaluate()
. Comment puis-je y parvenir? Voici le code:
let boxes2 = []
const getData = async() => {
return await page.evaluate(async () => { // scroll till there's no more room to scroll or you get at least 250 boxes
console.log(await new Promise(resolve => {
var scrolledHeight = 0
var distance = 100
var timer = setInterval(() => {
boxes = document.querySelectorAll("div.style-scope.ytd-item-section-renderer#contents > ytd-video-renderer > div.style-scope.ytd-video-renderer#dismissable")
console.log(`${boxes.length} boxes`)
var scrollHeight = document.documentElement.scrollHeight
window.scrollBy(0, distance)
scrolledHeight += distance
if(scrolledHeight >= scrollHeight || boxes.length >= 50){
clearInterval(timer)
resolve(Array.from(boxes))
}
}, 500)
}))
})
}
boxes2 = await getData()
console.log(boxes2)
Le console.log
Enveloppement de la promesse imprime la matrice résultante de la console du navigateur. Je ne peux tout simplement pas obtenir ce tableau dans boxes2
Où j'appelle la fonction getData()
fonction. J'ai l'impression d'être manquant sur un petit petit peu, mais je ne peux pas comprendre ce que c'est. Appréciez n'importe quel conseil ici.
let videoURLs = await page.evaluate(async () => { // scroll till there's no more room to scroll or you get at least 250 boxes
return await new Promise(resolve => {
var scrolledHeight = 0
var distance = 100
var timer = setInterval(() => {
boxes = Array.from(document.querySelectorAll("div.style-scope.ytd-item-section-renderer#contents > ytd-video-renderer > div.style-scope.ytd-video-renderer#dismissable a#video-title")).map(vid => vid.href)
// boxes = Array.from(document.querySelectorAll("div.style-scope.ytd-item-section-renderer#contents > ytd-video-renderer > div.style-scope.ytd-video-renderer#dismissable"))
var scrollHeight = document.documentElement.scrollHeight
window.scrollBy(0, distance)
scrolledHeight += distance
if(scrolledHeight >= scrollHeight || boxes.length >= 50){
clearInterval(timer)
resolve(boxes)
}
}, 500)
})
})
console.log(videoURLs)