最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

我如何可以滚动5分钟(或如果它之前完成以下)与节点JS的木偶页?

运维笔记admin8浏览0评论

我如何可以滚动5分钟(或如果它之前完成以下)与节点JS的木偶页?

我如何可以滚动5分钟(或如果它之前完成以下)与节点JS的木偶页?

我如何可以滚动页面5分钟,在节点JS使用的木偶(或更少,如果页面完成滚动)?我只能让页面滚动,直到它到达页面的结尾,但是我想等仅5分钟或更少,如果滚动前5分钟完成。我使用的代码如下:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({
        headless: false
    });
    const page = await browser.newPage();
    await page.goto('');
    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);
}
发布评论

评论列表(0)

  1. 暂无评论