Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Virtual assistant