Estoy tratando de obtener el tamaño de todos los medios en una URL específica con Titiritero. Hice este script con un servidor Node.JS simple. La URL es un parámetro de línea de comando.
const puppeteer = require('puppeteer'); const axios = require('axios'); let totalPageSize = { 'image/jpeg' : 0, 'image/png' : 0, 'video/mp4' : 0, 'image/webp' : 0 }; (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setRequestInterception(true); await page.setDefaultNavigationTimeout(0); await page.setCacheEnabled(false); page.on('request', (interceptedRequest) => { countFiles(interceptedRequest); }); await page.goto(process.argv[2]); // FINAL OUTPUT console.log(totalPageSize); await browser.close(); })(); async function countFiles(requested) { var request = requested; if ( requested.url().indexOf('.png?') != -1 || requested.url().indexOf('.jpg?') != -1 || requested.url().indexOf('.svg?') != -1 || requested.url().indexOf('.webp?') != -1 || requested.url().indexOf('.mp4?') != -1) { request = request.url().substring(0, request.url().indexOf('?')); } if ( request.url().endsWith('.png') || request.url().endsWith('.jpg') || request.url().endsWith('.svg') || request.url().endsWith('.webp') || request.url().endsWith('.mp4')) { await request.abort(); url = request.url(); axios.get(url) .then((res) => { totalPageSize[res.headers['content-type']] += parseInt(res.headers['content-length']); }) } else { await request.continue(); } }En realidad, parece funcionar, tengo una cantidad de bytes como salida, pero no siempre es la misma (puede ser 2 veces más grande o más pequeña en una misma página no dinámica).
¿Tienes una idea de una posible solución?
Gracias