Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

89
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda