• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

120
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.

almost 3 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.

almost 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda