-
-
Notifications
You must be signed in to change notification settings - Fork 46
/
Prise de rdv automatique sur Doctolib.py
116 lines (73 loc) · 4.37 KB
/
Prise de rdv automatique sur Doctolib.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python
# coding: utf-8
# <h1>Table of Contents<span class="tocSkip"></span></h1>
# <div class="toc"><ul class="toc-item"><li><span><a href="#Prise-de-rendez-vous-automatique-sur-Doctolib---COVID-19" data-toc-modified-id="Prise-de-rendez-vous-automatique-sur-Doctolib---COVID-19-1"><span class="toc-item-num">1 </span>Prise de rendez-vous automatique sur Doctolib - COVID 19</a></span><ul class="toc-item"><li><span><a href="#But-initial" data-toc-modified-id="But-initial-1.1"><span class="toc-item-num">1.1 </span>But initial</a></span></li><li><span><a href="#Premier-tutoriel-pour-prendre-en-main-selenium" data-toc-modified-id="Premier-tutoriel-pour-prendre-en-main-selenium-1.2"><span class="toc-item-num">1.2 </span>Premier tutoriel pour prendre en main selenium</a></span></li><li><span><a href="#Solution" data-toc-modified-id="Solution-1.3"><span class="toc-item-num">1.3 </span>Solution</a></span></li><li><span><a href="#Automatisation-toutes-les-55-minutes" data-toc-modified-id="Automatisation-toutes-les-55-minutes-1.4"><span class="toc-item-num">1.4 </span>Automatisation toutes les 55 minutes</a></span></li><li><span><a href="#Conclusion" data-toc-modified-id="Conclusion-1.5"><span class="toc-item-num">1.5 </span>Conclusion</a></span></li></ul></li></ul></div>
# # 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 <https://partners.doctolib.fr/hopital-public/perigueux/vaccination-covid?speciality_id=5494&enable_cookies_consent=1>,
#
# 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 !