当我向下滚动时,会创建新内容.新内容有一个特定的类名.

我怎样才能一直向下滚动,直到所有元素都加载完毕?

换句话说,我想达到这样一个阶段:如果我一直向下滚动,就不会加载任何新内容.

我用代码向下滚动,加上

await page.waitForSelector('.class_name');

这种方法的问题是,在加载了所有元素之后,代码会继续向下滚动,不会创建新的元素,最终会出现超时错误.

以下是代码:

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

推荐答案

试一试:

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

Node.js相关问答推荐

为高流量网站优化Node.js实时通知服务

Express 4.18正文解析

如何在RavenDB中执行JS索引?

我的 MERN 网站一直告诉我我的一个函数不是一个函数

无法从 mongoDB 访问数据?

如何在Node.js的telegraf.js命令中添加参数?

处理嵌套元素时,使用xml2js库解析XML时发生错误

如何使用mongoose引用不在项目中的模型

如何获取需要加载cheerio的网站部分数据?

我如何保护nodejs中的路由

等待不在 Express.js 中处理 res.app.render

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

[NodeJs 从 ADAL 升级到 MSAL]:无法在字符串上创建属性authenticationScheme

如何为一个网站实现这 2 个网址.即 www.administrator.sitename.com 和 www.sitename.com?

如何将使用 Gulp 的 node 部署到 heroku

从 Node.js 应用程序查询 Heroku 托管的 Postgres 数据库时出现自签名证书错误

Nodejs 随机免费 tcp 端口

Express.js:没有这样的文件或目录

如何从 find 方法返回 Mongoose 结果?

桌面应用程序仅支持 oauth_callback 值 'oob'/oauth/request_token