一尘不染

木偶-向下滚动直到不再

node.js

我处于向下滚动时会创建新内容的情况。新内容具有特定的类名称。

我如何继续向下滚动直到所有元素加载完毕?换句话说,我想达到一个阶段,如果我继续向下滚动,则不会加载任何新内容。

我正在使用代码向下滚动,再加上

await page.waitForSelector('.class_name');

这种方法的问题在于,在所有元素加载完之后,代码将继续向下滚动,没有创建新元素,最终我收到超时错误。

编辑:这是代码

await page.evaluate( () => {
                window.scrollBy(0, window.innerHeight);
            });
await page.waitForSelector('.class_name');

阅读 199

收藏
2020-07-07

共1个答案

一尘不染

试一下:

const puppeteer = require('puppeteer');

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

    await autoScroll(page);

    await page.screenshot({
        path: 'yoursite.png',
        fullPage: true
    });

    await browser.close();
})();

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();
                }
            }, 100);
        });
    });
}

资料来源:https :
//github.com/chenxiaochun/blog/issues/38

2020-07-07