Titiritero. ¿Qué está esperando waitForNavigation?

Sep 02 2020

¿Qué "navegación" está waitForNavigationesperando?

¿La navegación de sitios web? ¿Los navegadores actualizan el icono de "navegación" para terminar de girar?

¿O es solo un método redactado de forma incómoda que debería nombrarse waitForBrowserToLoad?


Pero, cuando lo uso, así:

await this.page.waitForNavigation();

La página termina de cargarse.

Y sin embargo, nunca se resuelve. No estoy seguro de por qué.

Que esta waitForNavigationesperando?

async function beforeScrape(page) {
  //code gets this far
  await this.page.waitForNavigation();
  //never resolves
  await page.click(".table-header");
}

Respuestas

1 Vaviloff Sep 02 2020 at 10:38

La documentación dice:

[page.waitForNavigation] se resuelve cuando la página navega a una nueva URL o se vuelve a cargar. Es útil para cuando ejecuta código que indirectamente hará que la página navegue.

Por ejemplo, llena un formulario y hace clic en el botón "Enviar", después de lo cual se muestra una nueva página con resultados. De esta forma puede esperar hasta que se cargue la nueva página:

await Promise.all([
  page.waitForNavigation(),
  page.click('input[type=submit]'),
]);

Si le indica a la secuencia de comandos que espere la navegación, pero no la provoca, se quedará allí esperando hasta que se agote el tiempo.