#!/usr/bin/env python # coding: utf-8 #

Table of Contents

#
# # Prise de rendez-vous automatique sur Doctolib - COVID 19 # *Ceci est une expérimentation, et n'est pas encore terminé* # # ## But initial # # 1. utiliser [Selenium](https://www.selenium.dev/) et [selenium Python](https://selenium-python.readthedocs.io/installation.html) pour automatiser l'utilisation du site , # # 2. vérifier si le site a changé, et m'envoyer un SMS si oui. # # - Auteur : [Lilian Besson](https://perso.crans.org/besson/) ([@Naereen](https://GitHub.com/Naereen) sur GitHub) # - Licence : [MIT Licensed](https://lbesson.mit-license.org/) # - Date : Mardi 09 février 2021 # --- # ## Premier tutoriel pour prendre en main selenium # Note : je n'avais jamais utilisé selenium ou ce genre de module pour contrôler un navigateur en mode "headless". # Ce n'est pas très compliqué, et j'ai trouvé que ce petit tutoriel est bien fait : https://pythonbasics.org/selenium-firefox-headless/ # [Cette documentation est bien complète, pour le module Python de selenium](https://selenium-python.readthedocs.io/). # In[1]: URL = "https://partners.doctolib.fr/hopital-public/perigueux/vaccination-covid?speciality_id=5494&enable_cookies_consent=1" # In[2]: from selenium import webdriver try: print(f"Downloading '{URL}'...") firefoxOptions = webdriver.FirefoxOptions() firefoxOptions.headless = True browser = webdriver.Firefox(options=firefoxOptions) browser.get(URL) print(browser.page_source[:500]) finally: try: browser.close() except: pass # J'ai bien réussi à installer et utiliser Selenium. Ca marche bien ! # ## Solution # J'aurai besoin de ces modules là : # In[3]: import time from datetime import datetime import urllib.request import subprocess from selenium import webdriver # Vérifions le contenu de la page, et voir si elle affiche ce message suivant : # # > En raison d'une forte demande, ce centre n'a plus de disponibilités : 3362 vaccinations vont avoir lieu dans les 28 prochains jours. Réessayez prochainement ou cherchez un autre centre. # In[7]: print(f"Downloading '{URL}'...") firefoxOptions = webdriver.FirefoxOptions() firefoxOptions.headless = True browser = webdriver.Firefox(options=firefoxOptions) browser.get(URL) # In[11]: message = "ce centre n'a plus de disponibilités" if message in browser.page_source: print(f"{URL} indique :\n{message}") else: print(f"{URL} n'indique pas :\n{message}\nPeut être qu'il y a des disponibilités désormais !") get_ipython().system('FreeSMS.py f"{URL} semble indiquer qu\'il y a des disponibilités désormais."') # Quand on a fini, on ferme le navigateur : # In[ ]: browser.close() # ## Automatisation toutes les 55 minutes # # Je ne ferai pas ça dans Python mais avec un simple script bash et un `watch` # In[71]: get_ipython().system('watch -help') # ## Conclusion # # C'était drôle. C'était une expérimentation. Mais ne vous servez pas de ça !