import time import os import gradio as gr import pandas as pd from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager # Configuration Selenium def setup_selenium(): options = Options() options.add_argument("--headless") # Exécution en arrière-plan (optionnel) options.add_argument("--disable-gpu") options.add_argument("--window-size=1920,1080") # Définir un dossier de téléchargement personnalisé download_dir = os.path.expanduser("~/Downloads") # Modifier selon besoin prefs = {"download.default_directory": download_dir} options.add_experimental_option("prefs", prefs) service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=options) return driver, download_dir # Fonction pour télécharger le fichier avec Selenium def download_echa_xls(): driver, download_dir = setup_selenium() try: url = "https://echa.europa.eu/fr/candidate-list-table" driver.get(url) time.sleep(5) # Attendre le chargement de la page # Trouver et cliquer sur le bouton "Export to XLS" export_button = driver.find_element(By.ID, "_disslists_WAR_disslistsportlet_exportButtonXLS") export_button.click() time.sleep(10) # Attendre le téléchargement # Vérifier si le fichier a été téléchargé files = os.listdir(download_dir) xls_files = [f for f in files if f.endswith(".xls") or f.endswith(".xlsx")] if xls_files: return os.path.join(download_dir, xls_files[-1]) else: return None except Exception as e: return f"❌ Erreur Selenium : {e}" finally: driver.quit() # Fonction pour afficher le fichier dans Gradio def process_echa_data(): file_path = download_echa_xls() if not file_path or "Erreur" in file_path: return "❌ Erreur : Impossible de télécharger le fichier." df = pd.read_excel(file_path, engine="openpyxl") return df # Interface Gradio with gr.Blocks() as demo: gr.Markdown("# 📄 Téléchargement des Substances ECHA avec Selenium") btn = gr.Button("📥 Télécharger et Afficher les Données") output = gr.Dataframe() btn.click(fn=process_echa_data, inputs=[], outputs=[output]) # Lancer l'application Gradio if __name__ == "__main__": demo.launch()