如何在 node js 中使用 puppeteer 滚动页面 5 分钟(如果之前完成则更短)?

How can I scroll a page for 5 minutes (or less if it finishes before) with puppeteer in node js?

如何在 node js 中使用 puppeteer 将页面滚动 5 分钟(如果页面完成滚动则更短)?我只能让页面滚动到页面末尾,但如果滚动在 5 分钟前完成,我只想等待 5 分钟或更短时间。我使用的代码如下:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({
        headless: false
    });
    const page = await browser.newPage();
    await page.goto('https://twitter.com/Avengers');
    await page.setViewport({
        width: 1200,
        height: 800
    });

    await autoScroll(page);
})();

async function autoScroll(page){
    await page.evaluate(async () => {
        await new Promise((resolve, reject) => {
            var totalHeight = 0;
            var distance = 100;
            var timer = setInterval(() => {
                var scrollHeight = document.body.scrollHeight;
                window.scrollBy(0, distance);
                totalHeight += distance;

                if(totalHeight >= scrollHeight){

                    clearInterval(timer);
                    resolve();
                }
            }, 120);
        });
    });
}

在主函数中,我们将定义何时退出:

(async () => {
    // ...

    let finishTime = new Date().getTime() + (5 * 60 * 1000);

    await autoScroll(page, finishTime);

    // ...

})();

然后将其传递给 page.evaluate:

async function autoScroll(page, finishTime){
    await page.evaluate(async (finishTime) => {

        await new Promise((resolve, reject) => {
            var totalHeight = 0;
            var distance = 100;
            var timer = setInterval(() => {
                var scrollHeight = document.body.scrollHeight;
                window.scrollBy(0, distance);
                totalHeight += distance;

                if(totalHeight >= scrollHeight || new Date().getTime() > finishTime){

                    clearInterval(timer);
                    resolve();
                }

            }, 120);
        });
    }, finishTime);
}