Bien le bonjour
Il faut bien comprendre la nature inhérente à JavaScript, c’est à dire: sa nature asynchrone.
En d’autres termes: on ne peut malheureusement pas juste écrire des lignes d’instructions les unes en dessous des autres en pensant que celles-ci vont être exécutées de manière séquentielle.
En effet, certaines opérations sont asynchrones, et nécessitent que l’on force notre programme à attendre qu’elles soient terminées, avant de pouvoir passer à la ligne suivante: d’où l’utilisation du mot clé await
ici .
await
bloque l’exécution du code tant que la promesse n’est pas terminée (source ici)
Sinon, notre programme exécute la ligne d’après, sans se soucier que la ligne en cours soit terminée
Pour faire hyper simple, sans trop rentrer dans les détails: à chaque fois que tu veux appeler une fonction, et que la documentation indique que cette dernière renvoie une <Promise> , alors il faut systématiquement précéder l’appel à cette fonction par le mot clé await
.
Or, d’après la documentation de l’API de Puppeteer:
Donc pour que ça fonctionne comme attendu, il te faut:
await page.waitFor(5000);
await page.goto(url);
Et pour le coté random, tu peux faire cela:
const getRandomFloat = (min, max) => Math.random() * (max - min) + min;
// Attend un nombre aléatoire de secondes, entre 1 et 5s
await page.waitFor(getRandomFloat(1,5));
await page.goto(url);