Envío un formulario con el siguiente código y quiero que Puppeteer espere a que se cargue la página después de enviar el formulario.
await page.click("button[type=submit]"); //how to wait until the new page loads before taking screenshot? // i don't want this: // await page.waitFor(1*1000); //← unwanted workaround await page.screenshot({path: 'example.png'});¿Cómo esperar a que se cargue la página con titiritero?
Puede esperar la navegación de forma asincrónica para evitar que se null en la redirección,
await Promise.all([ page.click('button[type=submit]'), page.waitForNavigation({waitUntil: 'networkidle2'}) ]);Esto le ayudará si page.click ya activa una navegación.
await page.waitForNavigation();
Según la Documentación Oficial , debes usar:
page.waitForNavigation(opciones)
options< Objeto > Parámetros de navegación que pueden tener las siguientes propiedades:
timeout< número > Tiempo máximo de navegación en milisegundos, por defecto es de 30 segundos, pase0para deshabilitar el tiempo de espera. El valor predeterminado se puede cambiar mediante el método page.setDefaultNavigationTimeout(timeout) .waitUntil< cadena | Array < string >> Cuando se considera que la navegación fue exitosa, el valor predeterminado esload. Dada una matriz de cadenas de eventos, se considera que la navegación es exitosa después de que se hayan activado todos los eventos. Los eventos pueden ser:
load: considera que la navegación ha finalizado cuando se activa el evento deload.domcontentloaded: considere que la navegación finaliza cuando se activa el eventoDOMContentLoaded.networkidle0: considera que la navegación ha finalizado cuando no hay más de 0 conexiones de red durante al menos500ms.networkidle2: considera que la navegación ha finalizado cuando no hay más de 2 conexiones de red durante al menos500ms.- devuelve: < Promise <[?Response]>> Promise que se resuelve en la respuesta del recurso principal. En caso de múltiples redirecciones, la navegación se resolverá con la respuesta de la última redirección. En caso de navegación a un ancla diferente o navegación debido al uso de la API de historial, la navegación se resolverá con
null.
Puede usar page.waitForNavigation() para esperar a que navegue una página:
await page.waitForNavigation(); Pero dado que page.waitForNavigation() es un atajo para page.mainFrame().waitForNavigation() , podemos usar lo siguiente para una mejora menor en el rendimiento:
await page._frameManager._mainFrame.waitForNavigation();