{"id":1220,"date":"2024-03-01T20:09:03","date_gmt":"2024-03-01T19:09:03","guid":{"rendered":"https:\/\/geekcommunicant.com\/blog\/?p=1220"},"modified":"2024-11-18T22:45:29","modified_gmt":"2024-11-18T21:45:29","slug":"automatiser-clic-fortunes-cookie-clicker","status":"publish","type":"post","link":"https:\/\/geekcommunicant.com\/blog\/2024\/03\/01\/automatiser-clic-fortunes-cookie-clicker\/","title":{"rendered":"Automatiser le clic sur les fortunes de Cookie Clicker"},"content":{"rendered":"\n<p>Aujourd\u2019hui, apr\u00e8s avoir effectu\u00e9 une ascension sur Cookie Clicker, je me suis dit : \u201cSi je veux d\u00e9bloquer les fortunes (qui apparaissent dans le fil d\u2019actualit\u00e9s), il va falloir encore que je reste attentif devant mon \u00e9cran\u2026\u201d.<\/p>\n\n\n\n<p>C\u2019est alors que je me suis demand\u00e9 s\u2019il n\u2019y avait pas moyen d\u2019automatiser cela.<\/p>\n\n\n\n<p>La premi\u00e8re \u00e9tape fut d\u2019analyser le code principal du jeu.<\/p>\n\n\n\n<p>Contrairement \u00e0 d\u2019autres aspects du jeu (les mini-jeux ou encore les cookies dor\u00e9s\u2026) le fil d\u2019actualit\u00e9s n\u2019est pas g\u00e9r\u00e9 par l\u2019interm\u00e9diaire de l\u2019objet principal du jeu (<code>Game<\/code> dans le code du jeu).<\/p>\n\n\n\n<p>Pour arriver \u00e0 mon but, il faut donc passer par le code HTML du jeu. Un rapide coup d\u2019oeil \u00e0 ce code me donne l\u2019ID (<code>commentsText1<\/code>) de la div qui contient la nouvelle affich\u00e9e.<\/p>\n\n\n\n<p>Avec cet ID je peux maintenant le s\u00e9lectionner avec <code><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Document\/getElementById\" target=\"_blank\" rel=\"noreferrer noopener\">document.getElementById()<\/a><\/code>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Mais maintenant, comment je fais pour d\u00e9tecter la pr\u00e9sence d\u2019une fortune ? Avec un peu de patience, j\u2019ai trouv\u00e9 la r\u00e9ponse : une fortune, contrairement \u00e0 une nouvelle \u201cnormale\u201d est inclue dans un <code>&lt;span&gt;<\/code>.<\/p>\n\n\n\n<p>La logique \u00e0 adopter est donc de regarder r\u00e9guli\u00e8rement le contenu de notre <code>&lt;div&gt;<\/code> s\u00e9lectionn\u00e9e, et que si c\u2019est un <code>&lt;span&gt;<\/code>, on clique dessus.<\/p>\n\n\n\n<p>Pour trouver par type de tag les enfants d\u2019un \u00e9l\u00e9ment s\u00e9lectionn\u00e9 avec <code>getElementById()<\/code>, il existe la m\u00e9thode <code><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Element\/getElementsByTagName\" target=\"_blank\" rel=\"noreferrer noopener\">getElementsByTagName()<\/a><\/code>.<\/p>\n\n\n\n<p>Cette m\u00e9thode retourne une <code><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/HTMLCollection\" target=\"_blank\" rel=\"noreferrer noopener\">HTMLCollection<\/a> <\/code>(en quelque sorte un array), dont le nombre d\u2019\u00e9l\u00e9ments \u00e0 l\u2019int\u00e9rieur est disponible via sa propri\u00e9t\u00e9 <code>length<\/code>.<\/p>\n\n\n\n<p>Et si cette collection contient des \u00e9l\u00e9ments (<code>length<\/code> sup\u00e9rieur \u00e0 z\u00e9ro), on clique sur le premier \u00e9l\u00e9ment de cette collection (index z\u00e9ro) \u00e0 l&rsquo;aide de la m\u00e9thode <code><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/HTMLElement\/click\" target=\"_blank\" rel=\"noreferrer noopener\">click()<\/a><\/code>.<\/p>\n\n\n\n<p>Cela donne le code suivant :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nconst newsTicker = document.getElementById(&#039;commentsText1&#039;);\n\nlet fortunes = newsTicker.getElementsByTagName(&#039;span&#039;);\n\nif(fortunes.length) {\n\tfortunes&#x5B;0].click();\n}\n<\/pre><\/div>\n\n\n<p>Pour automatiser son ex\u00e9cution, il suffit d\u2019englober le tout dans la fonction d\u2019un <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/setInterval\" target=\"_blank\" rel=\"noreferrer noopener\"><code>setInterval()<\/code><\/a>, et voil\u00e0.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aujourd\u2019hui, apr\u00e8s avoir effectu\u00e9 une ascension sur Cookie Clicker, je me suis dit : \u201cSi je veux d\u00e9bloquer les fortunes (qui apparaissent dans le fil d\u2019actualit\u00e9s), il va falloir encore que je reste attentif devant mon \u00e9cran\u2026\u201d. C\u2019est alors que &hellip; <a href=\"https:\/\/geekcommunicant.com\/blog\/2024\/03\/01\/automatiser-clic-fortunes-cookie-clicker\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[19],"tags":[65,31],"class_list":["post-1220","post","type-post","status-publish","format-standard","hentry","category-javascript","tag-cookie-clicker","tag-javascript"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2IoOb-jG","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1238,"url":"https:\/\/geekcommunicant.com\/blog\/2024\/05\/20\/declencher-evenement-javascript-vanilla\/","url_meta":{"origin":1220,"position":0},"title":"Comment d\u00e9clencher n&rsquo;importe quel \u00e9v\u00e9nement en JavaScript vanilla","author":"geekc","date":"20\/05\/2024","format":false,"excerpt":"Apr\u00e8s avoir r\u00e9ussi \u00e0 automatiser les clicks sur les fortunes de Cookie Clicker (voir ici), par curiosit\u00e9 je me suis int\u00e9ress\u00e9 \u00e0 la premi\u00e8re version de ce jeu (voir ici). Sur cette version, la premi\u00e8re chose que j\u2019ai cherch\u00e9 \u00e0 automatiser est bien \u00e9videmment le click sur le cookie. Apr\u00e8s\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":835,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/06\/24\/carte-interactive-rues-sans-megots-leaflet\/","url_meta":{"origin":1220,"position":1},"title":"Carte interactive des rues sans m\u00e9gots avec Leaflet","author":"geekc","date":"24\/06\/2019","format":false,"excerpt":"Cette carte interactive des rues sans m\u00e9gots de Paris a \u00e9t\u00e9 r\u00e9alis\u00e9e suite \u00e0 la suite de la consultation de la page d\u2019actualit\u00e9s de la ville de Paris concernant cette action de propret\u00e9, qui ne contenait qu\u2019une image pour pr\u00e9senter la cartographie des diff\u00e9rentes rues concern\u00e9es par cette op\u00e9ration. Sources\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":903,"url":"https:\/\/geekcommunicant.com\/blog\/2020\/04\/07\/petit-tuto-paranos\/","url_meta":{"origin":1220,"position":2},"title":"Petit tuto pour les paranos","author":"geekc","date":"07\/04\/2020","format":false,"excerpt":"Bon, cette p\u00e9riode d\u2019\u00e9pid\u00e9mie de virus (biologique, pas informatique) est aussi une p\u00e9riode d\u2019\u00e9pid\u00e9mie de fake news. La derni\u00e8re en date concerne le formulaire de g\u00e9n\u00e9ration d\u2019attestation de d\u00e9placement. Cette rumeur tient au fait que le QR code g\u00e9n\u00e9r\u00e9 par ce formulaire permettrait de r\u00e9cup\u00e9rer les donn\u00e9es pr\u00e9sentes sur votre\u2026","rel":"","context":"Dans &quot;Divers&quot;","block_context":{"text":"Divers","link":"https:\/\/geekcommunicant.com\/blog\/category\/divers\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20200407-172504_Camera.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20200407-172504_Camera.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20200407-172504_Camera.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20200407-172504_Camera.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20200407-172504_Camera.jpg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":727,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/04\/15\/retour-premiere-carte-interactive\/","url_meta":{"origin":1220,"position":3},"title":"Retour sur ma premi\u00e8re carte interactive","author":"geekc","date":"15\/04\/2019","format":false,"excerpt":"Dans mon dernier article (voir), j'ai indiqu\u00e9 que la premi\u00e8re solution de carte interactive que j'avais pr\u00e9sent\u00e9e dans une s\u00e9rie de deux articles (1 et 2) ne fonctionnait pas sous Chrome. R\u00e9cemment, en consultant le code d'une page de reserves-naturelles.org, je me suis aper\u00e7u que la carte des r\u00e9gions de\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":848,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/07\/01\/carte-interactive-rues-sans-megots-openlayers\/","url_meta":{"origin":1220,"position":4},"title":"Carte interactive des rues sans m\u00e9gots avec OpenLayers","author":"geekc","date":"01\/07\/2019","format":false,"excerpt":"Bon, je suppose que vous commencez \u00e0 avoir l\u2019habitude que je vous pr\u00e9sente la mani\u00e8re de cr\u00e9er une carte interactive \u00e0 l\u2019aide des deux librairies majeures OpenLayers et Leaflet. Apr\u00e8s avoir rapidement cr\u00e9\u00e9 la carte des rues et sections de rue concern\u00e9es par l\u2019op\u00e9ration \u00ab\u00a0Des rues sans m\u00e9gots\u00a0\u00bb avec Leaflet,\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1133,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/03\/10\/gloubi-script-un-systeme-de-tooltip\/","url_meta":{"origin":1220,"position":5},"title":"Gloubi script &#8211; un syst\u00e8me de tooltip","author":"geekc","date":"10\/03\/2023","format":false,"excerpt":"J\u2019ai d\u00e9cid\u00e9 cette semaine de me pencher sur le script de tooltip pr\u00e9sent\u00e9 sur le site de gloubiweb. Dans une premi\u00e8re partie je pr\u00e9senterai rapidement le fonctionnement du script actuel, et dans une deuxi\u00e8me, je vous indiquerai comment recr\u00e9er (quasi) \u00e0 l\u2019identique cet ancien script. Pr\u00e9sentation de du code existant\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/comments?post=1220"}],"version-history":[{"count":0,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1220\/revisions"}],"wp:attachment":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/media?parent=1220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/categories?post=1220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/tags?post=1220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}