YubiGeek

NodeJS : comment créer un bot Twitter avec Puppeteer ?

Like
Like Love Haha Wow Sad Angry
23

J’avais écrit un article il y a quelques temps sur le développement d’un bot Twitter. L’utilisation de ce bot peut être bloqué par Twitter puisqu’il utilisait l’API directe de la plateforme. Cette fois-ci, nous allons voir une alternative qui utilisera directement l’interface “desktop” (bureau) de Twitter.

Pour écrire ce bot, nous allons utiliser JavaScript et un “package” (paquet) nommé Puppeteer, un package développé par Google, pour Google Chrome (ou Chromium pour ceux qui connaissent). La plupart des choses que vous pouvez faire manuellement dans votre navigateur peuvent être faites en utilisant Puppeteer ! Voici quelques exemples pour vous aider à démarrer :

  • Générez des captures d’écran et des fichiers PDF de pages.
  • Explorer un SPA et générer un contenu pré-rendu (par exemple “SSR”).
  • Automatiser la soumission de formulaires, les tests d’interface utilisateur, la saisie au clavier, etc…
  • Créez un environnement de test automatisé et à jour. Exécutez vos tests directement dans la dernière version de Chrome à l’aide des dernières fonctionnalités JavaScript et du navigateur.
  • Capturez une trace chronologique de votre site pour aider à diagnostiquer les problèmes de performances.
  • Testez les extensions Chrome.

Vous l’aurez compris, vous pouvez presque tout automatiser si vous connaissez un peu l’API de Puppeteer. Dans notre cas, nous allons automatiser le “follow” sur Twitter.

Je vous laisse regarder la progression des statistiques de mon compte personnel pour juger par vous-même de l’utilité de ce “hack” Twitter.

Progression en un mois sur Twitter

Les pré-requis

Avant de commencer, n’oubliez pas d’installer NodeJS sur votre ordinateur. Puis créez un répertoire que vous nommerez par exemple “twitter-bot-with-puppeteer”.

Ouvrez la console dans ce répertoire et installez les “packages” NPM suivant : puppeteer et node-schedule.

Ou par le biais de Yarn pour les plus confirmés d’entre vous :

Dans votre répertoire de travail, nommez un fichier index.js qui contiendra les instructions pour le “follow” automatique, et un autre TwitterAutoFollow.class.js qui contiendra la classe JavaScript pour exécuter Puppeteer.

Edition du fichier TwitterAutoFollow.class.js

Dans ce fichier, nous allons retrouver une classe et plusieurs méthodes, dont un constructeur, une méthode d’initialisation, une méthode pour le “follow automatique”, ainsi qu’une méthode pour faire une pause, et une autre pour clôturer le processus.

Dans le constructeur (constructor), nous allons ajouter des configurations qui seront utilisées plus tard dans le code, ces paramètres ne changeront pas de valeur, c’est pour cela qu’on les ajoute dans le constructeur. On passera trois paramètres dans le constructeur : le token d’authentification (voir plus bas dans le tutoriel pour savoir comment le récupérer), l’agent utilisateur (vous pourrez évidemment choisir votre “user agent”), ainsi qu’un paramètre nécessaire si vous voulez contrôler visuellement ce qu’il se passe sur l’interface de Twitter.

“args” est une configuration “hack” utile pour faire tourner ce script sur une machine dédiée par exemple, on lui dit ici de ne pas utiliser de “sandbox” (bac à sable).

Ensuite, on va déclarer une méthode init() nécessaire à l’initialisation du processus, elle va déclarer l’instance de Puppeteer. On passera également les paramètres suivants : le token d’authentification, et l’agent utilisateur (user agent).

Une fois cette méthode remplie et comprise, vous pouvez passer à la suite.

On va écrire maintenant la méthode la plus attendue du tutoriel, celle qui va “follow” automatiquement des personnes sur une page Twitter.

Cette méthode prendra en paramètre plusieurs arguments :

  • screenName : le nom d’utilisateur Twitter sur lequel vous voulez suivre ses “followers”.
  • onlyWithAvatar : permettra de suivre ou non uniquement les personnes avec un avatar.
  • onlyWithBio : permettra de suivre ou non uniquement les personnes ayant une biographie remplie.
  • onlyIsNotProtected : permettra de suivre ou non uniquement les personnes ayant un compte non protégé (badge cadena).
  • onlyNoFollowBack : permettra de suivre ou non uniquement les personnes ne s’étant pas déjà abonné à votre compte.

On déclarera l’utilisation de l’agent utilisateur (user agent) et l’inscription d’un cookie dans le navigateur (pour que Twitter sache que vous êtes connecté au site), donc pas besoin de passer par le formulaire de connexion avec une saisie automatique des identifiants de connexion.

On récupère alors certains éléments du DOM avec des requêtes CSS pour avoir accès aux informations qui nous intéressent, comme le bouton de soumission quand on veut suivre un utilisateur (bouton Follow), etc…

Afin d’arrêter le processus, il ne faut pas oublier une méthode, qui nous manque jusqu’à présent, la méthode close().

Cette méthode permettra d’arrêter le navigateur Chrome, et mettra fin au processus.

Comment récupérer le token d’authentification ?

Pour récupérer le “token” d’authentification, il suffit de vous connecter sur Twitter, avec un navigateur comme Google Chrome par exemple. D’aller dans la console développeur, et d’aller sur l’onglet “Application”. Rendez-vous ensuite dans la section “Cookies” puis cherchez le site “https://twitter.com”. Cherchez ensuite le cookie “auth_token” et copiez sa valeur (value).

Vous êtes prêt à passer à la suite !

Edition du fichier index.js

Dans ce fichier, nous allons utiliser la classe précédemment écrite en l’instanciant.

Puis nous allons utiliser la méthode init() et followFollowers() afin d’initialiser et de suivre les utilisateurs abonnés à un compte.

Dans notre cas, nous allons suivre les utilisateurs abonnés au compte Instagram et Twitter. Nous utiliserons aussi la méthode sleep() à 5 secondes pour faire une pause entre chaque action.

Vous pouvez également utiliser “node-schedule” (installé plus haut) pour planifier ces actions et les exécuter toutes les 15 minutes par exemple (pour éviter les abus et prévenir des blocages).

Vous pouvez héberger ce code NodeJS sur une machine dédiée afin de faire tourner le code sans avoir votre PC allumé. Retrouvez également le code sur Github.

Like
Like Love Haha Wow Sad Angry
23

Maxence Rose

Passionné de high-tech et fasciné par Google, j'écris ce que bon me semble et je teste pour vous les derniers services du Web. Ce blog me permet de m'exprimer sur les différents produits de Google, en premier lieu ses services et les appareils Android.

Un seul commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Maxence Rose

Passionné de high-tech et fasciné par Google, j'écris ce que bon me semble et je teste pour vous les derniers services du Web. Ce blog me permet de m'exprimer sur les différents produits de Google, en premier lieu ses services et les appareils Android.