Bonjour, je viens seulement de revenir sur le site et de voir vos demandes.
Petit problème: mon nouveau script n’a fonctionné que quelques jours, ensuite je ne pouvais plus me connecter (même par moi même) Je ne sais pas si c’était un bug du site ou si j’ai été blacklisté un certain temps (peut être ils ont remarqué que je me logger automatiquement trop souvent alors que j’avais augmenté le délai…)
Maintenant que je peux de nouveau me logger, j’ai arreté le script car j’ai reçu depuis le linky et j’ai mis le lyxee dessus. Je vous mets neanmoins le script en message suivant. je fais une tentative mais j’ai du mal à mettre du code ici.
Alors il faut avoir selenium d’opérationnel, de mon côté j’ai tout dans des docker. Il y a 3 lignes à modifier dans le code: ADRESSE SERVEUR, LOGIN ET PASSWORD. Je crois avoir mis 1 heure entre deux requetes dans mon automatisation et j’ai été bloqué.
import sys
import subprocess
# Auto-installation de selenium si absent (pour le conteneur HA)
try:
import selenium
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", "selenium"])
# Tes imports habituels ensuite
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json
import time
options = Options()
options.add_argument("--headless")
options.add_argument("--window-size=1920,1080")
driver = webdriver.Remote(command_executor='http://192.168.ADRESSE DE MON SERVEUR:4444/wd/hub', options=options)
def identify_color_by_css(element):
"""Identifie la couleur en fonction de la classe CSS du bouton"""
classes = element.get_attribute("class").lower()
if "bg-primary-50" in classes or "blue" in classes: return "Bleu"
if "bg-white" in classes or "white" in classes or "border-gray" in classes: return "Blanc"
if "bg-red" in classes or "red" in classes or "rouge" in classes: return "Rouge"
return "Inconnu"
try:
driver.get("https://monagence.uem-metz.fr/#/login")
wait = WebDriverWait(driver, 20)
# Connexion
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='email']"))).send_keys("MON LOGIN")
driver.find_element(By.CSS_SELECTOR, "input[type='password']").send_keys("MON PASSWORD")
btn_login = driver.find_element(By.XPATH, "//button[contains(., 'connecter')]")
driver.execute_script("arguments[0].click();", btn_login)
time.sleep(15)
# On récupère tous les boutons dans la zone "Jours Tempo"
# Sur ton image, ce sont les deux éléments arrondis côte à côte
buttons = driver.find_elements(By.XPATH, "//div[contains(@class, 'flex')]//button | //div[contains(@class, 'flex')]//div[contains(@class, 'rounded')]")
res = {"today": "Inconnu", "tomorrow": "Inconnu"}
tempo_elements = []
for el in buttons:
txt = el.text.lower()
if "aujourd'hui" in txt or "demain" in txt or "venir" in txt or "bleu" in txt or "blanc" in txt:
tempo_elements.append(el)
if len(tempo_elements) >= 1:
# On analyse le premier bouton (Aujourd'hui)
# S'il contient "blanc" dans son texte ou ses classes
html_today = tempo_elements[0].get_attribute('outerHTML').lower()
if "blanc" in html_today or "white" in html_today: res["today"] = "Blanc"
elif "bleu" in html_today or "blue" in html_today: res["today"] = "Bleu"
elif "rouge" in html_today or "red" in html_today: res["today"] = "Rouge"
if len(tempo_elements) >= 2:
# On analyse le deuxième bouton (Demain)
html_tomorrow = tempo_elements[1].get_attribute('outerHTML').lower()
if "à venir" in html_tomorrow: res["tomorrow"] = "À venir"
elif "blanc" in html_tomorrow: res["tomorrow"] = "Blanc"
elif "bleu" in html_tomorrow: res["tomorrow"] = "Bleu"
elif "rouge" in html_tomorrow: res["tomorrow"] = "Rouge"
print(json.dumps(res))
except Exception as e:
print(json.dumps({"today": "Erreur", "tomorrow": str(e)[:30]}))
finally:
driver.quit()
Ah oui merci pour l’info, de mon côté je n’en ai plus besoin mais cela permet effectivement de récupérer l’info beaucoup plus facilement et sans se logger