Как я могу прокрутить страницу в течение 5 минут (или меньше, если она заканчивается раньше) с кукловодом в узле js? - PullRequest
0 голосов
/ 10 февраля 2019

Как я могу прокрутить страницу в течение 5 минут (или меньше, если страница заканчивает прокрутку), используя кукловода в узле js?Я могу только прокрутить страницу, пока она не достигнет конца страницы, но я хочу подождать всего 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);
        });
    });
}

1 Ответ

0 голосов
/ 10 февраля 2019

В основной функции мы определим, когда выйти:

(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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...