Si una página tiene JavaScript que modifica el DOM, es posible que haya elementos sin cargar antes de que el Web Scraper ejecute pageFunction
.
El raspador no puede esperar a que todo el JavaScript se ejecute, por que las páginas suelen realizar constantemente solicitudes de red, lo que causaria una esperar interminable. Por lo tanto, depende del programador, hacer que espere a los elementos que necesite.
La función context.waitFor()
espera:
- a que transcurra una cantidad de milisegundos dada,
- a que aparezca un selector único,
- o a que una función proporcionada devuelva verdadero.
Es posible que nunca se encuentre el selector o que la función nunca devuelva verdadero, por lo que la función waitFor() también tiene un tiempo de espera. El valor predeterminado es 20 segundos. Puede anularlo proporcionando un segundo parámetro, con una propiedad
timeoutMillis
.
await waitFor(2000);
await waitFor('#my-id');
await waitFor(() => !!window.myObject);
await waitFor('.bad-class', { timeoutMillis: 5000 });
Despues de esperar un botón (por su selector único), podemos hacer clic en el, usando jQuery o JavaScript simple .
await waitFor('div.show-more > button');
$('div.show-more > button').click()