puppeteer - scraping - Titiritero espera carga de página después de enviar formulario
puppeteer scraping (3)
Presento un formulario con el siguiente código y quiero que Puppeteer espere la carga de 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 el titiritero?
De acuerdo con la github.com/GoogleChrome/puppeteer/blob/master/docs/… , debe utilizar:
page.waitForNavigation (opciones)
options
< Object > Parámetros de navegación que pueden tener las siguientes propiedades:
timeout
< number >timeout
máximo de navegación en milisegundos, predeterminado a 30 segundos, pase0
para desactivar el tiempo de espera. El valor predeterminado se puede cambiar utilizando el page.setDefaultNavigationTimeout(timeout) .waitUntil
< string | Array < string >> Cuando se considera que la navegación se ha realizado correctamente, los valores predeterminados seload
. Dada una serie de cadenas de eventos, la navegación se considera exitosa después de que se hayan activado todos los eventos. Los eventos pueden ser:
load
: considere que la navegación finalice cuando seload
evento deload
.domcontentloaded
: considere que la navegación seDOMContentLoaded
cuando seDOMContentLoaded
eventoDOMContentLoaded
.networkidle0
: considere que la navegación finalice cuando no haya más de 0 conexiones de red durante al menos500
ms.networkidle2
: considere que la navegación esté terminada cuando no haya más de 2 conexiones de red durante al menos500
ms.- devuelve: < Promise <[? Response] >> Promise que se resuelve en la respuesta del recurso principal. En caso de redireccionamientos múltiples, la navegación se resolverá con la respuesta del último redireccionamiento. En el caso de la navegación a un ancla diferente o la navegación debido al uso de la API del historial, la navegación se resolverá con un
null
.
Legibilidad:
Puede usar github.com/GoogleChrome/puppeteer/blob/master/docs/… para esperar a que una página navegue:
await page.waitForNavigation();
Actuación:
Pero dado que page.waitForNavigation()
es un acceso directo para page.mainFrame().waitForNavigation()
, podemos usar lo siguiente para una mejora de rendimiento menor:
await page._frameManager._mainFrame.waitForNavigation();
Puede esperar a que la navegación sea asíncrona para evitar que se null
redirección,
await Promise.all([
page.click("button[type=submit]"),
page.waitForNavigation({ waitUntil: ''networkidle0'' }),
]);
Esto te ayudará si page.click ya activa una navegación.
await page.waitForNavigation();