当条件为真(?)

Promise is not revolved when the condition it's true (?)

我无法理解为什么在条件为真时未解决承诺。就我而言,我正在与 Puppeteer 合作,我正在尝试向下滚动以收取更多 google 评论。我 select 所有容器子项和评论总数。这是相同的数字,但似乎那个条件不是真的。我什么都不懂...

我的代码:

console.log('he entrado');

            await page.evaluate(() => new Promise((resolve) => {

                const scroller = document.querySelector('.review-dialog-list');
                const totalChilds = document.querySelectorAll('.gws-localreviews__general-reviews-block > *').length;
                const totalReviews = document.querySelector('.z5jxId').innerText.slice(0, -8);

                if(totalChilds != totalReviews){
                    var timer = setInterval(() => {
                        scroller.scrollBy(0, 400);
                    }, 100);
                }else{
                    clearInterval(timer);
                    resolve();
                }
            }));

            console.log('he salido');

我可以看到带有消息 'He entrado' 的 console.log,但它从未向我显示 'He salido'。我对滚动条没有任何问题,我检查了浏览器控制台中的 select 或两者具有相同的值。

如果有人可以帮助我或向我解释为什么我的代码失败,我将不胜感激。希望你能理解我,如果不理解,请告诉我,我会附加更多细节。非常感谢!

您仅在 page.evaluate 首次运行时检索 scrollertotalChildstotalReviews。您应该在每次滚动时检索它们。

await page.evaluate(() => new Promise((resolve) => {
    const scroller = document.querySelector('.review-dialog-list');
    const timer = setInterval(() => {
        const totalChilds = document.querySelectorAll('.gws-localreviews__general-reviews-block > *').length;
        const totalReviews = document.querySelector('.z5jxId').innerText.slice(0, -8);
        if (totalChilds === totalReviews) {
            clearInterval(timer);
            resolve();
        }
        scroller.scrollBy(0, 400);
    }, 100);
}));