Aller au contenu

Microsoft Reward V2

septembre 2024 → mars 20266 min de lecture

Code source (extension)Première version (bot)Téléchargements

Microsoft Rewards donne des points pour des recherches Bing, des quiz et des activités quotidiennes, qu’on échange ensuite contre des bons d’achat. Faire ces gestes tous les jours, c’est répétitif, donc tentant à automatiser. Je m’y suis mis en mars 2023, surtout pour pratiquer TypeScript et m’amuser.

Je préfère le dire tout de suite : je ne recommande pas d’utiliser cet outil. Automatiser Microsoft Rewards va à l’encontre des conditions d’utilisation de Microsoft, et je l’ai construit pour apprendre, pas pour farmer des points. Le code reste public sur GitHub pour ceux que ça intéresse, mais le projet est plutôt à l’abandon, et il ne marche peut-être déjà plus, parce que l’interface de Bing change sans prévenir. Ceci dit, c’est un des projets dont je suis le plus fier, pour les problèmes qu’il m’a forcé à résoudre.

L’extension

Dans sa dernière version, c’est une extension pour Edge. On se connecte à son compte Microsoft, on coche dans son popup les recherches ou les activités qu’on veut faire, et on clique sur Start. Elle travaille dans son propre groupe d’onglets, on peut continuer à naviguer à côté, et le popup montre où en est chaque tâche, avec un journal de ce qu’elle fait. Le voici en pleine session, avec des données de test :

Le popup de l’extension en pleine session, avec des données de test : les points, une barre de progression par tâche, les quatre cases cochées, le bouton Stop et le journal des dernières recherches.

GitHub Actions publie une nouvelle archive de l’extension à chaque push sur main, pour qu’on puisse l’installer sans rien compiler.

Trois versions

Il m’a fallu trois versions pour en arriver là. La première, en mars 2023, était un script Puppeteer qui lançait Edge sans fenêtre et faisait les recherches tout seul. Il fallait mettre son adresse et son mot de passe dans un fichier, et désactiver la double authentification de son compte, sinon le script n’arrivait pas à se connecter. Entre deux étapes, il attendait deux ou trois secondes, puis regardait la page en espérant qu’elle ait suivi. Au final, je ne l’ai presque jamais utilisé.

La deuxième, un soir de septembre 2024, repartait de zéro avec Bun. Edge s’ouvrait cette fois dans une vraie fenêtre, on s’y connectait soi-même, et plus aucun mot de passe ne traînait dans un fichier. Le script attendait aussi que la page ait fini de charger et que les résultats soient affichés, au lieu d’attendre une durée fixe. Après ce soir-là, je n’y ai plus touché pendant un an et demi.

La troisième, en février 2026, c’est l’extension, réécrite avec Claude Code. Les règles du projet sont dans un fichier CLAUDE.md, que Claude lit à chaque session, et l’une d’elles interdit au code de stocker ou de taper un identifiant. L’extension ne voit jamais un mot de passe. J’avais déjà fait une toute petite extension en 2022, pour Cookie Clicker, mais une extension de cette taille, c’était nouveau pour moi.

Comment elle marche

Une extension peut cliquer dans une page avec du JavaScript ordinaire, mais ces clics ont isTrusted à false, ce qui dit à la page qu’ils ne viennent pas d’une vraie personne. L’extension passe donc par l’API chrome.debugger, qui donne accès au protocole des outils de développement. Ce qu’elle tape et ce qu’elle clique par là arrivent dans la page comme de vrais gestes.

Son code de fond tourne dans un service worker, comme le veut Manifest V3, et le navigateur peut l’arrêter dès qu’il ne fait rien. Un simple setTimeout entre deux recherches risquerait de ne jamais se déclencher. Chaque recherche est donc programmée par une alarme (chrome.alarms), et l’état du bot est rangé dans chrome.storage.session, qui survit à ces arrêts. Le popup se contente d’écouter cet état.

Pour savoir quoi faire, l’extension interroge l’API de Microsoft Rewards avec la session du navigateur. Elle y trouve les points qu’il reste à gagner en recherches, à trois points la recherche, et les cartes pas encore faites. Elle retrouve ensuite chaque carte dans la page par son identifiant, data-bi-id, et clique au milieu de son lien. Elle ne répond pas aux quiz. D’après ce que j’ai vu en la testant, ouvrir la carte et y rester quelques secondes suffit.

Ne pas ressembler à un robot

Pour moi, c’est la partie la plus intéressante du projet. Un site peut repérer un bot à son rythme, alors l’extension tape chaque lettre avec un petit délai, reste quelques secondes sur les résultats et fait défiler la page avec des pauses, comme si elle lisait. Parfois, elle ouvre aussi un des premiers résultats dans un onglet à part, et le referme un peu plus tard. Au début, elle n’attendait que trois à six secondes entre deux recherches. En mars, j’ai tout ralenti, et elle attend maintenant entre vingt secondes et une minute et demie, parfois jusqu’à trois minutes.

Il reste le navigateur lui-même. Une page peut lire navigator.webdriver, l’indicateur d’un navigateur piloté par un programme, et l’extension le redéfinit avant le chargement de chaque page, en une ligne. Je m’en tiens au principe ici, je ne vais pas en faire un mode d’emploi.

Il fallait aussi de vraies recherches, variées et d’actualité. L’extension part des tendances du jour de Google Trends en France, puis demande à l’autocomplétion de Google des suggestions autour de chacune, ce qui donne quelques centaines de recherches. Si ces sources ne répondent pas, elle ne démarre pas, au lieu de retomber sur une liste fixe comme au début.

Ce que j’ai retiré

La première version de l’extension cherchait aussi les points des recherches mobiles, comme les deux scripts avant elle. Elle faisait passer Edge pour un iPhone, jusqu’à simuler un petit écran et des gestes tactiles. Ça marchait, mais ça faisait beaucoup de faux-semblants pour quelques points de plus, et autant de code qui pouvait casser du jour au lendemain. J’ai tout supprimé le jour même. En mars, la fausse identité des recherches sur ordinateur, qui annonçait une version d’Edge de fin 2024, est partie aussi.

Où en est le projet

Le code n’a plus bougé depuis mars 2026. C’est pourtant un des rares projets où j’ai vu que ça répondait à un vrai besoin. Les deux dépôts ont quelques étoiles, et en avril un utilisateur m’a écrit sur GitHub pour me dire que l’extension était très bien finie, et me demander si elle répondait aussi aux quiz. Ça fait plaisir, sur un projet fait pour m’amuser. On a commencé à chercher pourquoi deux activités annoncées par l’API n’étaient pas trouvées dans la page, et le ticket est toujours ouvert.

Technologies utilisées