Estoy tratando de usar Titiritero para desplazarme hasta el último mensaje de un chat de Whatsapp para poder obtener el HTML de toda la conversación y raspar esos datos. Mi programa actual se desplaza hacia arriba pero falla a la mitad. Es una convo bastante grande (>40k mensajes) pero quería saber si el motivo es el tamaño o si hay algo que pueda hacer para evitarlo. Traté de jugar con los tiempos de espera entre pergaminos ya que pensé que era demasiado rápido, pero no importó.
Aquí está mi código:
const CONTACT_NAME = 'name'; const puppeteer = require('puppeteer'); const fs = require('fs/promises'); (async () => { const browser = await puppeteer.launch({ defaultViewport: null, headless: false, args: ['--no-sandbox', '--disable-setuid-sandbox'], }); // default is true const page = await browser.newPage(); await page.goto('https://web.whatsapp.com'); await page.setViewport({ width: 800, height: 800, }); await page.waitForSelector(`[title="${CONTACT_NAME}"]`, { timeout: 1000000 }); await page.click(`[title="${CONTACT_NAME}"]`); await page.waitForTimeout(1 * 20 * 1000); const scrollable_section = '_33LGR'; function scroll() { return page.evaluate((selector) => { const scrollableSection = document.getElementsByClassName(selector)[0]; return new Promise((resolve, reject) => { console.log(scrollableSection); let previousHeight = scrollableSection.scrollHeight; scrollableSection.scrollTop = 0; let counter = 0; const timer = setInterval(() => { const scrollHeight = scrollableSection.scrollHeight; console.log({ previousHeight, scrollHeight }); if (previousHeight === scrollHeight) { counter++; if (counter === (2 * 60 * 1000) / 3000) { clearInterval(timer); resolve(); } } else { scrollableSection.scrollTop = 0; previousHeight = scrollHeight; counter = 0; } }, 3000); }); }, scrollable_section); } await scroll(); const html = await page.content(); await fs.writeFile('output.html', html); await page.screenshot({ path: 'page.png' }); await browser.close(); })();Y aquí está el mensaje de error en Chromium ("¡Oh, Snap! Algo salió mal al mostrar esta página web. Código de error: 5.):