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

94
Vistas
Reiniciar mientras se repite cuando se hace clic en el selector para la página siguiente

lo siento, pero soy muy nuevo en la codificación y este es mi primer proyecto, en el que elegí crear un raspador simple para eBay usando titiritero. El programa toma el elemento a buscar y la cantidad deseada de páginas para raspar como un argumento de línea de comando. Sin embargo, debido a que el selector children li:nth-child aumenta cada vez, tuve que crear un ciclo while incremental para pasar por dichos n-th child de 2 a 60. Esto funciona para la primera página y genera todos los elementos deseados. Sin embargo, debido a la necesidad de raspar más de 2 páginas, el valor i utilizado en el bucle debe restablecerse al comienzo de la página siguiente para reiniciar dicho bucle. Creo que la paginación es correcta, ya que en el modo sin cabeza, se hace clic en las páginas segunda, tercera, etc.

bucle actual

 let currentPage = 1; while (currentPage <= pagestoScrape) { let content = await page.evaluate(() => { let data = []; let childnumber = 2; let i = 2; while (i < 60) { let itemids = document.querySelectorAll(`#srp-river-results > ul > li:nth-child(${childnumber}) > div`); itemids.forEach((itemid) => { let PRODUCT_ID = `#srp-river-results > ul > li:nth-child(${childnumber}) > div > div.s-item__info.clearfix > a > h3`; let PRODUCT_PRICE = `#srp-river-results > ul > li:nth-child(${childnumber}) > div > div.s-item__info.clearfix > div.s-item__details.clearfix > div:nth-child(1) > span`; let item = itemid.querySelector(PRODUCT_ID).innerText; let price = itemid.querySelector(PRODUCT_PRICE).innerText; data.push({ item, price, }); }); childnumber++; i++; } return data; }); let urls = []; urls = urls.concat(content); if (currentPage < pagestoScrape) { await Promise.all([ await page.click('#srp-river-results > ul > div.srp-river-answer.srp-river-answer--BASIC_PAGINATION_V2 > div.s-pagination > span > span > nav > a.pagination__next.icon-link'), await page.waitForSelector('#srp-river-results > ul > div.srp-river-answer.srp-river-answer--BASIC_PAGINATION_V2 > div.s-pagination > span > span > nav > a.pagination__next.icon-link'), ]) } currentPage++; let jsonData = JSON.stringify(content, null, 1); fs.writeFileSync(`./output/output${item}.txt`, jsonData); }

Intenté volver a evaluar i después del ciclo, durante la promesa y cambiar el ciclo a for. Esperaba que esto reiniciara el ciclo y que la salida contuviera los resultados de cada página. Sin embargo, da como resultado la salida de solo 1 página, sin error.

about 4 years ago · Juan Pablo Isaza
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