Ceci est une expérimentation, et n'est pas encore terminé
utiliser Selenium et selenium Python pour automatiser l'utilisation du site https://partners.doctolib.fr/hopital-public/perigueux/vaccination-covid?speciality_id=5494&enable_cookies_consent=1,
vérifier si le site a changé, et m'envoyer un SMS si oui.
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.
URL = "https://partners.doctolib.fr/hopital-public/perigueux/vaccination-covid?speciality_id=5494&enable_cookies_consent=1"
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
Downloading 'https://partners.doctolib.fr/hopital-public/perigueux/vaccination-covid?speciality_id=5494&enable_cookies_consent=1'... <html lang="fr"><head data-country="fr" data-env="production"><meta charset="utf-8"><meta content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" name="viewport"><meta content="noindex" name="robots"><meta content="nofollow" name="robots"><meta content="Trouvez rapidement un spécialiste près de chez vous et prenez rendez-vous gratuitement en ligne en quelques clics" name="description"><script async="" src="https://www.googletagmanager.com/gtm.js?id=GTM-N
J'ai bien réussi à installer et utiliser Selenium. Ca marche bien !
J'aurai besoin de ces modules là :
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.
print(f"Downloading '{URL}'...")
firefoxOptions = webdriver.FirefoxOptions()
firefoxOptions.headless = True
browser = webdriver.Firefox(options=firefoxOptions)
browser.get(URL)
Downloading 'https://partners.doctolib.fr/hopital-public/perigueux/vaccination-covid?speciality_id=5494&enable_cookies_consent=1'... <html lang="fr"><head data-country="fr" data-env="production"><meta charset="utf-8"><meta content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" name="viewport"><meta content="noindex" name="robots"><meta content="nofollow" name="robots"><meta content="Trouvez rapidement un spécialiste près de chez vous et prenez rendez-vous gratuitement en ligne en quelques clics" name="description"><script async="" src="https://www.googletagmanager.com/gtm.js?id=GTM-N
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 !")
!FreeSMS.py f"{URL} semble indiquer qu'il y a des disponibilités désormais."
https://partners.doctolib.fr/hopital-public/perigueux/vaccination-covid?speciality_id=5494&enable_cookies_consent=1 indique : ce centre n'a plus de disponibilités
Quand on a fini, on ferme le navigateur :
browser.close()
Je ne ferai pas ça dans Python mais avec un simple script bash et un watch
!watch -help
Usage: watch [options] commande Options: -b, --beep émet un bip si la commande sort avec un code non nul -c, --color interprète les séquences de couleurs et de styles ANSI -d, --differences[=<permanent>] met en évidence les changements entre mises à jours -e, --errexit termine si la commande sort avec un code non nul -g, --chgexit termine quand la sortie de la commande change -n, --interval <sec> secondes de délai entre mises à jours -p, --precise essaie d'exécuter la commande à intervalles réguliers -t, --no-title masque l'en-tête -x, --exec passe la commande à exec au lieu de « sh -c » -h, --help affiche cette aide et termine -v, --version affiche les informations de version et sort Pour plus de détails, consultez watch(1).
C'était drôle. C'était une expérimentation. Mais ne vous servez pas de ça !