我用Puppeteer来try 在所有图片加载后拍摄一个网站的截图,但无法让它工作.

以下是我到目前为止获得的代码,我使用https://www.digg.com作为示例网站:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.digg.com/');

    await page.setViewport({width: 1640, height: 800});

    await page.evaluate(() => {
        return Promise.resolve(window.scrollTo(0,document.body.scrollHeight));
    });

    await page.waitFor(1000);

    await page.evaluate(() => {
        var images = document.querySelectorAll('img');

        function preLoad() {

            var promises = [];

            function loadImage(img) {
                return new Promise(function(resolve,reject) {
                    if (img.complete) {
                        resolve(img)
                    }
                    img.onload = function() {
                        resolve(img);
                    };
                    img.onerror = function(e) {
                        resolve(img);
                    };
                })
            }

            for (var i = 0; i < images.length; i++)
            {
                promises.push(loadImage(images[i]));
            }

            return Promise.all(promises);
        }

        return preLoad();
    });

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

    browser.close();
})();

推荐答案

这里有一个built-in option:

await page.goto('https://www.digg.com/', {"waitUntil" : "networkidle0"});

networkidle0考虑当不超过0个网络连接至少500毫秒时完成导航.

networkidle2考虑当不超过2个网络连接至少500毫秒时完成导航.

另外,如果你使用的是像Twitter这样的无休止滚动的单页应用程序,那么它当然不会起作用.

Node.js相关问答推荐

赫斯基添加命令已弃用?

编辑Mongoose中的对象嵌套数组

如何创建具有不同对象类型的数组类型

如何获取mongoose中单个id数据的记录

Postgressql的BIGSERIAL自增序列,即使由于唯一约束错误没有创建行,也会自动增加

TypeScript Eslint警告了一个AWS客户端构造函数(dynamodb),但没有警告另一个(s3)

Typescript 正则表达式:过滤器返回空

如何使用 Remix 仅在客户端呈现组件?

如何在 Docker 容器中 SSO 登录 AWS(使用 aws-sdk v3)

如何修改这个flake.nix,这样我就不用每次加载环境都加载nix包了

看起来这段代码try GET 请求发送的值变为空白

Zod 模式中的self 数组

一个非常奇怪的JavaScript heap out of memory问题

Winston http 日志(log)级别的行为与 info 不同

使用 WebSockets 有服务器成本吗?

来自 Node-aws 的 Dynamo Local:所有操作都失败无法对不存在的表执行操作

如何使用 Puppeteer 从输入中删除现有文本?

Node.js:socket.io 关闭客户端连接

Node.js, require.main === 模块

Express js 阻止 GET /favicon.ico