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.