Actualmente estoy tratando de obtener información de un sitio web ( https://www.bauhaus.info/ ) y falla en el formulario emergente de cookies.
Este es mi código hasta ahora:
(async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://www.bauhaus.info'); await sleep(5000); const html = await page.content(); fs.writeFileSync("./page.html", html, "UTF-8"); page.pdf({ path: './bauhaus.pdf', format: 'a4' }); }); function sleep(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); }Hasta esto todo funciona bien. Pero no puedo aceptar el banner de cookies, porque no veo el html de este banner en titiritero. Pero en el pdf puedo ver el formulario.
¿Por qué no puedo ver esta ventana emergente en el código html? Búsqueda de bonificación: ¿hay alguna forma de reemplazar el método de suspensión con cualquier página. esperar sin saber qué método js activa la aparición del formulario de cookies?
Este elemento está en una raíz de sombra. Visite mi respuesta en Titiritero que no proporciona un código HTML preciso para la página con raíces ocultas para obtener información adicional sobre el DOM oculto.
Este código se sumerge en la raíz oculta, espera a que aparezca el botón y luego hace clic en él:
const puppeteer = require("puppeteer"); // ^13.5.1 let browser; (async () => { browser = await puppeteer.launch({headless: false}); const [page] = await browser.pages(); const url = "https://www.bauhaus.info/"; await page.goto(url, {waitUntil: "domcontentloaded"}); const el = await page.waitForSelector("#usercentrics-root"); await page.waitForFunction(el => el.shadowRoot.querySelector(".sc-gsDKAQ.dejeIh"), {}, el ); await el.evaluate(el => el.shadowRoot.querySelector(".sc-gsDKAQ.dejeIh").click() ); await page.waitForTimeout(100000); // pause to show that it worked })() .catch(err => console.error(err)) .finally(() => browser?.close()) ;