REACHconcern / app.py
MMOON's picture
Update app.py
efe4e84 verified
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()