Je développe un Bot WhatsApp à l’aide de Python et Selenium !

Pourquoi faire un bot Whatsapp ? Eh bien, les textos et moi, nous ne sommes pas spécialement amis. Et quand je dois en envoyer plusieurs pour organiser un évènement, envoyer des rappels à différentes personnes sans que ce soit dans un groupe ou quoique ce soit d’autre, je préfère le déléguer.

Et de là, je me suis dis que ce serait vraiment sympa si je pouvais automatiser l’envoi de messages WhatsApp via un script Python !

Je vais donc vous présenter dans ce tutoriel un script très simple qui vous permettra de le faire et surtout de vous donner les bases pour aller encore plus loin via un fichier de contact, de groupe etc.

Ce tutoriel est à vocation éducative uniquement.


🔥 Notions à connaitre🔥

  • SELENIUM : Framework de test informatique permettant de naviguer automatiquement au sein d’un navigateur Web.

  • XPath : C’est ce qui permet de naviguer dans le DOM (Document Object Model) de l’HTML ou de l’XML.

  • WHATSAPPWEB : L’interface Officielle WhatsApp qui permet d’envoyer des messages de manière sécurisé depuis notre ordinateur

  • PYTHON3 : Si vous êtes ici, je suppose que vous connaissez le langage de programmation. Mais il est toujours bon de rappeler que ce sera python3 qui sera utilisé tout au long de ce tutoriel.

🐍 Codons notre Script 🐍

Je suppose que Python3 est installé et prêt à l’emploi de votre côté, tout comme pip3.

Si ce n’est pas le cas, vous pouvez vous rendre sur la documentation officielle > ici

☑ Créez un fichier whatsapp.py et installation de Selenium :

Nous allons installer le module Selenium afin d’avoir accès à toutes les librairies.

python3 -m pip install Selenium

Ceci étant fait, créons notre fichier whatsapp.py.

☑ Import des librairies

Au sein de notre fichier nouvellement créé, commençons par importer toutes les librairies dont nous aurons besoin :

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options

☑ Stockage du destinataire et message

Nous allons maintenant définir 2 variables et les initialiser:

  • contactName : qui sera le nom du destinataire
  • messageToSend : qui sera le message à envoyer
contactName = "John"
messageToSend = "Salut ! J'envoie un message via mon script d'automatisation !"

☑ Installation de ChromeManager et lancement de WhatsApp

Maintenant, nous allons installer chromeDrive et l’instancier via à un service. Ce driver va ensuite nous permettre d’avoir accès et de lancer WhatsApp Web. L’interface va s’ouvrir, et on va nous demander de scanner le QR Code afin d’ouvrir une session.

Ici je vais ensuite ajouter une action utilisateur afin que l’on puisse appuyer sur Entrer dès que nous sommes authentifié avant d’executer le reste du code.

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.get("https://web.whatsapp.com")

# J'attends de m'identifier via le scan du QR code
print("Please scan the QR Code, And press Enter when it's done")
input()
print("You're now Logged In")

☑Aller sur la barre de recherche de WhatsApp Web

Ici, le code va permettre d’aller dans la barre de recherche de WhatsAppWeb.

input_path_searchContact : est une variable qui stocke le chemin XPath utilisé pour trouver la zone de saisie de la recherche de destinataire.

input_box_searchContact : va aller chercher ce champ et s’y positionner

input_box_searchContact.click() : permet de cliquer sur ce champ

# retrieve search concact input and clic
input_path_searchContact = '//*[@id="side"]/div[1]/div/label/div/div[2]'
input_box_searchContact = driver.find_element(by=By.XPATH, value=input_path_searchContact)
input_box_searchContact.click()

time.sleep(2)

☑ Saisir le nom du destinataire

Ensuite, nous saisissons le nom du contact afin qu’il soit écrit automatiquement.

input_box_searchContact.send_keys(contactName)
time.sleep(2)
selected_contact = driver.find_element(by=By.XPATH, value="//span[@title='"+contactName+"']")
selected_contact.click()

☑ Nous tapons le message et on l’envoie

De la même manière que pour le champs de recherche du destinataire, nous cherchons le champs de saisi d’envoie du message correspondant au destinataire et nous envoyons le message que nous avons déterminé plus haut.

input_xpath_messageBox = '//*[@id="main"]/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[2]'
input_messageBox = driver.find_element(by=By.XPATH, value=input_xpath_messageBox)
time.sleep(2)

# send message
input_messageBox.send_keys(messageToSend + Keys.ENTER)
time.sleep(2)

☑ On clôt le script

Une fois fait, on informe l’utilisateur du script que le message est bien envoyé et on ferme le driver.

print("Message send. Press Enter to ")
input()
print("Logged out")
driver.quit()
quit

🐍 Le code entier 🐍

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options

contactName = "Bebito"
messageToSend = "test test"

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.get("https://web.whatsapp.com")


print("Please scan the QR Code, And press Enter when it's done")
input()
print("You're now Logged In")


# retrieve search concact input and clic
input_path_searchContact = '//*[@id="side"]/div[1]/div/label/div/div[2]'
input_box_searchContact = driver.find_element(by=By.XPATH, value=input_path_searchContact)
input_box_searchContact.click()

time.sleep(2)

# send contact to search and retrieve
input_box_searchContact.send_keys(contactName)
time.sleep(2)
selected_contact = driver.find_element(by=By.XPATH, value="//span[@title='"+contactName+"']")
selected_contact.click()


input_xpath_messageBox = '//*[@id="main"]/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[2]'
input_messageBox = driver.find_element(by=By.XPATH, value=input_xpath_messageBox)
time.sleep(2)

#input_messageBox.send_keys(messageToSend + Keys.ENTER)
input_messageBox.send_keys(messageToSend)
time.sleep(2)

print("Message send. Press Enter to ")
input()
print("Logged out")
driver.quit()
quit

Pour aller encore plus loin :

FELICITATIONS !!!! Vous avez désormais automatisé l’envoi de vos messages WhatsApp via un script python et Selenium !!!!

Quelques idées pour aller encore plus loin :

  • Envoi à plusieurs contacts le même message
  • Itération sur un fichier de contacts CSV

Vous aimerez aussi...