Abro la ventana emergente 'entregar a' pero no puedo hacer clic en el campo de entrada e ingresar información.
(async () => { const browser = await puppeteer.launch({headless: false}); const page = await browser.newPage(); const url = 'https://www.tntsupermarket.com/eng/store-flyer'; await page.goto(url, {waitUntil: 'networkidle0'}); const newPagePromise = new Promise(x => browser.once('targetcreated', target => x(target.page()))); await page.evaluate(()=> { document.querySelector('span[class="deliverCss-city-FJJ"]').click(); }); const popup = await newPagePromise; await popup.waitForSelector('input[aria-label="Enter your Postal Code"]'); await popup.focus('input[aria-label="Enter your Postal Code"]'); await popup.click('input[aria-label="Enter your Postal Code"]'); await popup.keyboard.type('a2b'); })();La ventana emergente no es una página nueva, solo un elemento modal que se muestra con JS y sin navegación. Eliminar la promesa de navegación da un resultado bastante claro:
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.tntsupermarket.com/eng/store-flyer"; await page.goto(url, {waitUntil: "networkidle0", timeout: 90000}); const cityEl = await page.waitForSelector('span[class="deliverCss-city-FJJ"]'); await cityEl.evaluate(el => el.click()); const postalSel = 'input[aria-label="Enter your Postal Code"]'; const postalEl = await page.waitForSelector(postalSel); await postalEl.type("a2b"); await page.waitForTimeout(30000); // just to show that the state is as we wish })() .catch(err => console.error(err)) .finally(() => browser?.close()) ; Esto es un poco lento; hay una ventana emergente molesta que tal vez desee desactivar en lugar de usar "networkidle0" :
// ... same code await page.goto(url, {waitUntil: "domcontentloaded", timeout: 90000}); const closeEl = await page.waitForSelector("#closeActivityPop"); await closeEl.click(); const cityEl = await page.waitForSelector('span[class="deliverCss-city-FJJ"]'); // same code ... A primera vista, si la página está en caché, es posible que la ventana emergente no se muestre, por lo que es posible que desee cancelar page.waitForSelector("#closeActivityPop"); después de unos 30 segundos y continúe con el código sin hacer clic en él, dependiendo de qué tan flexible desee que sea el script.