web-dev-qa-db-fra.com

Comment retourner une valeur de la page.Evaluate () dans la marionnettiste?

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.

5
roittmi
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)
1
roittmi