Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

154
Vistas
Web-scraping - Cómo navegar siempre que haya un enlace disponible con Puppeteer JS

Quiero realizar un web scraping para todos los datos dentro del cuerpo de la tabla principal en la url https://data.anbima.com.br/debentures/AGRU12/agenda ... Sin embargo, como implementa la paginación, no puedo obtener eso se hizo fácilmente... Se me ocurrió el siguiente código que no funciona... Recibo el error ReferenceError: list is not defined , aunque lo he definido justo antes del ciclo while...

 const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(`https://data.anbima.com.br/debentures/AGRU12/agenda`); await page.waitForSelector('.normal-text'); var list = []; while (true) { let nextButton; await page.evaluate(async () => { const nodeList = document.querySelectorAll( '.anbima-ui-table > tbody > tr' ); let nodeArray = [...nodeList]; nextButton = document.querySelector('.anbima-ui-pagination__next-button'); let listA = nodeArray .map((tbody) => [...tbody.children].map((td) => [...td.children])) .map((tr) => tr.map((span) => span[0].innerHTML .replace('<label class="flag__children">', '') .replace('</label>', '') ) ); list.push(listA); }); if (!nextButton) { break; } else { await page.goto(nextButton.href); } } fs.writeFile('eventDates.json', JSON.stringify(list[0], null, 2), (err) => { if (err) throw new Error('Something went wrong'); console.log('well done you got the dates'); }); await browser.close(); })();
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La lista no está definida dentro de la función de devolución de llamada. Debería devolver la matriz en page.evaluate y luego usar esa matriz devuelta para empujarla a la lista.

 const list = []; while (true) { let nextButton; const listA = await page.evaluate(async () => { const nodeList = document.querySelectorAll( '.anbima-ui-table > tbody > tr' ); let nodeArray = [...nodeList]; nextButton = document.querySelector('.anbima-ui-pagination__next-button'); return nodeArray .map((tbody) => [...tbody.children].map((td) => [...td.children])) .map((tr) => tr.map((span) => span[0].innerHTML .replace('<label class="flag__children">', '') .replace('</label>', '') ) ); }); list.push(...listA);

Editar: se corrigió la última línea en mi ejemplo.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda