Comment déclencher n’importe quel événement en JavaScript vanilla

Après avoir réussi à automatiser les clicks sur les fortunes de Cookie Clicker (voir ici), par curiosité je me suis intéressé à la première version de ce jeu (voir ici).

Sur cette version, la première chose que j’ai cherché à automatiser est bien évidemment le click sur le cookie.

Après un rapide coup d’oeil au code de la page, j’ai trouvé l’id de notre cookie (dans notre cas “cookie”), et j’ai mis en place un classique setInterval pour déclencher un clic, avec notre grande amie la méthode click().

let legacyCookieClicker = setInterval(() => {
   document.querySelector('#cookie').click();
}, 250);

Mais cela n’avais par l’air d’avoir d’effet.

En revenant au code de la page, je me suis aperçu que sur cette version la fonction de gestion de clic est attachée à l’événement mouseup. Mais il n’existe pas de méthode mouseUp() sur les éléments HTML.

Une rapide recherche m’a permis de découvrir qu’il était possible de déclencher n’importe quel événement de manière programmatique : la méthode dispatchEvent().

Pour utiliser méthode, il faut d’abord créer notre événement, avec le constructeur correspondant à son type.

const myEvent = new PointerEvent('click');

Et ensuite, il suffit d’utiliser la méthode dispatchEvent de la cible de l’événement que l’on veut déclencher avec JavaScript.

myTarget.dispatchEvent(myEvent);

Dans le cas qui nous intéresse, le code complet donne :

setInterval(() => {
   const evnt = new MouseEvent('mouseup');
   
   document.querySelector('#cookie').dispatchEvent(evnt);
}, 250);

Laisser un commentaire