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

187
Vistas
Recorra las páginas y devuelva enlaces de productos en una sola matriz

Tengo el código que obtuve con algo de ayuda y se puede encontrar en este enlace AQUÍ . Funciona bien en principio, pero el problema es que devuelve enlaces y matrices para cada página por separado. Sin embargo, quiero que devuelva enlaces en una sola matriz para todas las páginas juntas. Necesito crear una cadena var all_links = [] y enviar todos los enlaces de cada página all_links.push(...links) y luego devolverlos como return all_links Pero el problema es que estoy fallando porque no No sé exactamente cómo hacerlo en este caso. Soy un principiante puro sin conocimientos previos en codificación.

 const puppeteer = require('puppeteer') const minDiscount = 20; async function getLinks() { const browser = await puppeteer.launch({ headless: false, defaultViewport: null, }); const page = await browser.newPage(); const url = 'https://www.mytoys.de/spielzeug-spiele/holz/'; await page.goto(url); // getting all the products, this will return an array of ElementHandle while(await page.$(".pager__link--next")){ await page.waitForSelector(".pager__link--next") await page.waitForTimeout(1000); await page.click('.pager__link--next') await page.waitForTimeout(1500); const products = await page.$$('.prod-grid.js-prod-grid .prod-grid__item.js-prod-grid_item'); const proms = await Promise.allSettled( products.map(async (prod) => { // searching for a discount on each product const disc = await prod.$$eval( '.prod-grid.js-prod-grid .prod-flag.prod-flag-sale', (discount) => discount.map((discItem) => discItem.innerText.replace(/[^0-9.]/g, '').replace(/\D+/g,'0') ) ); // if it has a discount if (disc.length > 0) { // we parse the discount to Integer type to compare it to minDiscount const discountInt = parseInt(disc[0], 10); if (discountInt >= minDiscount) { // we get the link of the product const link = await prod.$$eval('.prod-grid.js-prod-grid .prod-tile__link.js-prodlink', (allAs) => allAs.map((a) => a.href)); if (link.length > 0) { // push an object containing the discount and the link of the product return link[0]; } } } return null; }) ); const bulkArray = proms.map((item) => { if (item.status === 'fulfilled') return item.value; }); const endArray = bulkArray.filter(item => item !== null); console.log(endArray); } } getLinks();

Por favor, ayuda y ten piedad, ya que estoy empezando a aprender los conceptos básicos.

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

0

Aquí hay una limpieza para comenzar:

 const products = await page.$$eval('.prod-tile', divs => divs.map(div => { return { url: div.querySelector('a')?.href discount: div.querySelector('.prod-flag-sale')?.innerText } }))

En este punto, simplemente siga los siguientes enlaces y haga lo mismo para cada página.

over 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
Asistente virtual