No puedo entender por qué la promesa no se resuelve cuando la condición es verdadera. En mi caso, estoy trabajando con Puppeteer y estoy tratando de desplazarme hacia abajo para cobrar más reseñas de Google. Selecciono todos los niños del contenedor y el total de reseñas. Es el mismo número, pero parece que esa condición no es cierta. No entiendo nada...
Mi código:
console.log('he entrado'); await page.evaluate(() => new Promise((resolve) => { const scroller = document.querySelector('.review-dialog-list'); const totalChilds = document.querySelectorAll('.gws-localreviews__general-reviews-block > *').length; const totalReviews = document.querySelector('.z5jxId').innerText.slice(0, -8); if(totalChilds != totalReviews){ var timer = setInterval(() => { scroller.scrollBy(0, 400); }, 100); }else{ clearInterval(timer); resolve(); } })); console.log('he salido');Puedo ver el archivo console.log con el mensaje 'Él entró' pero nunca me muestra 'Él salió'. No tengo ningún problema con el scroller y compruebo los selectores en la consola del navegador y ambos tienen el mismo valor.
Si alguien puede ayudarme o explicarme por qué falla mi código, se lo agradecería. Espero que puedas entenderme y si no, házmelo saber y agregaré más detalles. ¡Muchas gracias!
Estás recuperando scroller , totalChilds y totalReviews solo cuando page.evaluate se ejecuta por primera vez. Deberías recuperarlos cada vez que te desplaces.
await page.evaluate(() => new Promise((resolve) => { const scroller = document.querySelector('.review-dialog-list'); const timer = setInterval(() => { const totalChilds = document.querySelectorAll('.gws-localreviews__general-reviews-block > *').length; const totalReviews = document.querySelector('.z5jxId').innerText.slice(0, -8); if (totalChilds === totalReviews) { clearInterval(timer); resolve(); } scroller.scrollBy(0, 400); }, 100); }));