Titiritero espera a que se carguen todas las imágenes y luego toma una captura de pantalla

Estoy usando Puppeteer para tratar de tomar una captura de pantalla de un website después de que todas las imágenes se hayan cargado, pero no puedo hacer que funcione.

Aquí está el código que tengo hasta ahora, estoy usando https://www.digg.com como el website de ejemplo:

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

    2 Solutions collect form web for “Titiritero espera a que se carguen todas las imágenes y luego toma una captura de pantalla”

    Hay una opción incorporada para eso:

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

    networkidle0 : considere que la navigation finalizará cuando no haya más de 0 conexiones de networking durante al less 500 ms

    networkidle2 : considere que la navigation debe finalizar cuando no haya más de 2 conexiones de networking durante al less 500 ms.

    PS Por supuesto, no funcionará si está trabajando con aplicaciones de desplazamiento de páginas sin fin como Twitter.

    Estoy enfrentando exactamente el mismo problema. Tengo la sensación de que la solución implicará el uso de:

     await page.setRequestInterceptionEnabled(true); page.on('request', interceptedRequest => { //some code here that adds this request to ... //a list and checks whether all list items have ... //been successfully completed! }); 

    https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetrequestinterceptionenabledvalue

    Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.