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

标签 javascript node.js puppeteer

如何在 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);
}

关于javascript - 如何在 node js 中使用 puppeteer 滚动页面 5 分钟(如果之前完成则更短)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54613567/

相关文章:

node.js - Puppeteer:Chrome 远程启动

javascript - 赋值后变量中 undefined variable

javascript - RequireJS + Angular : Undefined app. 回调不触发

javascript - 如何通过从 api 获取值来填充 react 选择的选项,以便在单击选择框时可见?

javascript - 使用 date-fns 解析多种格式

javascript - Node.js _http_server.js'Server函数的第一行困惑

javascript - 从字符串中提取所有电话号码

node.js - Dropbox token API 在 Node.js 中返回 "Missing client credentials"

node.js - 接收 Promise <Pending> 而不是值

javascript - 使用 Puppeteer/Playwright 滚动不适用于 SAPUI5 应用程序