Objetivo: tengo una página de la que necesito obtener html después de hacer clic primero en algo en la página.
Problema: el html que regresa no está esperando el clic de ese elemento.
Aquí hay una forma en que he tratado de hacerlo.
await page.setViewport({width: 1400, height: 800}); await page.waitForSelector('.specs .accent', {visible: true, timeout: 80000}); const html = await page.evaluate(() => { const moreButton = document.querySelector('.specs .accent'); moreButton.click(); return document.body.innerHTML; }); console.log(html);Aquí hay otra forma en que lo he intentado:
await page.setViewport({width: 1400, height: 800}); await page.waitForSelector('.specs .accent', {timeout: 80000}); await page.click('.specs .accent'); const html = await page.evaluate(() => document.body.innerHTML); console.log(html);El html que regresa es el html anterior al clic. Haciéndome creer que el clic está roto, pero sin error.
Notas:
page.click que pueda encontrar, pero podría estar depurando mal.<a href="javascript:void(0)" class="accent">More</a> . Cuando se hace clic, se completa con datos precargados.Finalmente: Realmente no estoy seguro de cómo depurar esto aún más. ¿Alguna pista?
Página de referencia: https://www.article.com/product/16190/mod-blue-berry-armchair
Después de probar con la URL que me envió por correo electrónico al soporte sin navegador, pude ver a través del depurador en vivo que la ventana gráfica predeterminada era un "móvil" y, por lo tanto, la estructura de la página había cambiado... El botón de hamburguesa era presente para la barra de navegación y la sección de Especificaciones donde está el botón en el que intenta hacer clic, estaba contraído.
Agregué esta línea antes de navegar a la página:
await page.setViewport({ width: 1920, height: 1080 }) Esto hizo que la ventana gráfica fuera más grande horizontalmente y, después de eso, fui a la consola y ejecuté un document.querySelector('.specs .accent').click() y pude hacer clic y expandir la información como deseaba.
La solución es que ciertas solicitudes de JavaScript bloqueadas pueden interrumpir la capacidad de Puppeteer para hacer clic en un elemento. Si tiene problemas con esto, asegúrese de que Browerless, Puppeteer o su proxy no bloqueen solicitudes y luego intente la página. Haga clic nuevamente.
Una solución de depuración simple es usar page.screenshot para ver si, de hecho, se hizo clic en algo.