-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain_pushbullet.py
119 lines (92 loc) · 4.76 KB
/
main_pushbullet.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
117
118
119
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pushbullet import Pushbullet
import time
import re
import schedule
gecko_driver_path = '/Users/.../Dowloads/geckodriver' # Remplacer par votre propre chemin
driver = webdriver.Firefox()
def login(url, code):
driver.get(url)
driver.find_element(By.XPATH, "/html/body/div/div/div[2]/form/input[1]").clear()
driver.find_element(By.XPATH, "/html/body/div/div/div[2]/form/input[1]").send_keys(code)
driver.find_element(By.XPATH, "/html/body/div/div/div[2]/form/input[5]").click()
WebDriverWait(driver, 10).until(EC.title_contains('Emploi du temps'))
time.sleep(1)
# Attendre que le bouton des jours soit visible
days_button = WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="horiz3"]')))
days_button.click()
time.sleep(1)
# Attendre que le bouton "Skip" soit visible
skip_button = WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, '/html/body/div/form[1]/a[3]')))
skip_button.click()
time.sleep(1)
# Sélectionner tous les éléments <area> en utilisant XPath
area_elements = driver.find_elements(By.XPATH, '/html/body/div/map/area')
# Chaîne pour stocker tous les résultats imprimés
notification_text = ""
# Cliquez sur chaque élément <area>
for area_element in area_elements:
area_title = area_element.get_attribute("title")
# Supprimer "PRESENTIEL"
area_title = area_title.replace("- PRESENTIEL", "")
match = re.search(r' - (.*?)Salle :', area_title)
if match:
extracted_part = match.group(1)
# Ajouter "Salle" à la partie extraite
extracted_part = f"{extracted_part} "
# Remplacer la partie originale par la partie modifiée
area_title = area_title.replace(match.group(1), extracted_part)
# Ajouter la modification à la chaîne de notification
notification_text += f"{area_title}\n"
# Ouvrir un nouvel onglet avec le lien de l'area
link = area_element.get_attribute("href")
driver.execute_script(f"window.open('{link}', '_blank');")
# Attendre que le nouvel onglet soit complètement chargé
time.sleep(2) # Ajout d'un temps d'attente de 2 secondes
driver.switch_to.window(driver.window_handles[1])
# ..............................
# Trouver tous les éléments <tr> à l'intérieur du tableau
rows = WebDriverWait(driver, 30).until(
EC.presence_of_all_elements_located((By.XPATH, '//table/tbody/tr'))
)
# Parcourir chaque élément <tr>
for row in rows:
# Rechercher tous les <td> avec le <span> ayant l'attribut de style spécifié
spans = row.find_elements(By.XPATH, './/td/span[@style="font-size:12px;color:blue; font-weight:bold;"]')
# Vérifier si la liste spans n'est pas vide et a suffisamment d'éléments
if spans and len(spans) >= 9:
# Accéder au 9e élément dans la liste (heure de début)
ninth_span = spans[7]
notification_text += f"---- Heure début : {ninth_span.text} ----\n"
# ..............................
# Fermer le nouvel onglet
driver.close()
# Revenir à l'onglet d'origine
driver.switch_to.window(driver.window_handles[0])
# Si aucun élément <area> n'est trouvé, grasse matinée !
if not area_elements:
notification_text = "Grasse matinée aujourd'hui !"
# Ajouter tous les résultats imprimés dans la chaîne de notification
driver.close()
# Envoi de la notification Pushbullet
pb = Pushbullet('MY_API_KEY')
title = "Cours de demain"
body = notification_text
pb.push_note(title, body)
print("Notification Pushbullet envoyée !")
# Définir la fonction de réinitialisation du planificateur
def reset_scheduler():
schedule.clear()
schedule.every().day.at("20:50").do(lambda: login('https://edt.univ-evry.fr/index.php?disconnect=true', 'Code Etudiant'))
# Planifier la réinitialisation à minuit
schedule.every().day.at("00:00").do(reset_scheduler)
# Planifier la première exécution de la fonction login à 19h30
schedule.every().day.at("20:50").do(lambda: login('https://edt.univ-evry.fr/index.php?disconnect=true', 'Code Etudiant'))
# Planifier la réinitialisation du planificateur à minuit
schedule.every().day.at("00:00").do(reset_scheduler)
while True:
schedule.run_pending()
time.sleep(1)