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

142
Vistas
raspador de imágenes JS

Pensé que hacer un raspador de imágenes básico sería un proyecto divertido. El código a continuación funciona en la consola del sitio web, pero no sé cómo hacer que funcione desde mi app.js.

 var anchors = document.getElementsByTagName('a'); var hrefs = []; for(var i=0; i < anchors.length; i++){ var src = anchors[i].href; if(src.endsWith(".jpeg")) { hrefs.push(anchors[i].href); }} console.log(hrefs);

Pensé que usar titiritero era una buena idea, pero mi conocimiento es demasiado limitado para determinar si eso es correcto o no. Este es mi código de titiritero:

 const puppeteer = require("puppeteer"); async function scrape(url) { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(url); var anchors = await page.evaluate(() => document.getElementsByTagName('a')); var hrefs = []; for(var i=0; i < anchors.length; i++){ var img = anchors[i].href; if(img.endsWith(".jpeg")) { hrefs.push(anchors[i].href); }} console.log({hrefs}, {img}); browser.close(); }

Entiendo que la última parte del código es incorrecta, pero no puedo encontrar una respuesta sólida a lo que se debe escribir en su lugar.

Gracias por tomarte tu tiempo.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

page.evaluate() solo puede transferir valores serializables (más o menos, los valores que JSON puede manejar). Como document.getElementsByTagName() devuelve una colección de elementos DOM que no son serializables (contienen métodos y referencias circulares), cada elemento de la colección se reemplaza con un objeto vacío. Debe devolver un valor serializable (por ejemplo, una matriz de textos o atributos href ) o usar algo como page.$$(selector) y ElementHandle API.

La API web no está definida fuera de la función de argumento .evaluate() , por lo que debe colocar toda la parte de la API web en la función de argumento .evaluate() y devolver datos serializables desde ella.

 const puppeteer = require("puppeteer"); async function scrape(url) { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(url); const data = await page.evaluate(() => { const anchors = document.getElementsByTagName('a'); const hrefs = []; for (let i = 0; i < anchors.length; i++) { const img = anchors[i].href; if (img.endsWith(".jpeg")) { hrefs.push(img); } } return hrefs; }); console.log(data); await browser.close(); }
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