bon ça donne ça :
# Importer les modules
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException
import time
import os
import csv
# permet de patienter jusqu'à la fin du téléchargement
def download_wait(path_to_downloads):
seconds = 0
dl_wait = True
while dl_wait and seconds < 600: #max 10 minutes
time.sleep(1)
dl_wait = False
if not os.path.exists(path_to_downloads):
dl_wait = True
seconds += 1
return seconds
# Adresse de départ (première page de la liste des consultations)
url = "https://mpe-marseille.local-trust.com/?page=Entreprise.EntrepriseAdvancedSearch&AllCons"
emplacement_download = "C:\\Download\\Fichiers\\"
# Préparation des options Chrome
options = Options()
options.add_argument("--start-maximized")
options.add_argument("--disable-features=VizDisplayCompositor")
prefs = {"profile.default_content_settings.popups": 0,
"download.default_directory": emplacement_download,
"directory_upgrade": True}
options.add_experimental_option("prefs", prefs)
# Démarrage de Chrome
browser = webdriver.Chrome(executable_path=r'C:\Download\Tools\chromedriver.exe', options=options)
# Ouverture de la fenêtre, nécessaire pour accéder aux boutons
browser.maximize_window()
# Allez, ça part de là ...
browser.get(url)
# Préparation des listes
date_limite = list()
annee = list()
liens = list()
nomzip = list()
numdce = list()
intitule = list()
objet = list()
# Tant que c'est vrai , on fait :
while True:
# On attend le chargement
delay = 2
# Chargement des liens d'ouverture de page vers chaque DCE
liens_html = browser.find_elements_by_link_text('Accéder à la consultation')
# Mise en tableau
for lien in liens_html:
liens.append(lien.get_attribute("href"))
# Tentons d'aller à la page suivante
try:
browser.find_element_by_id('ctl0_CONTENU_PAGE_resultSearch_PagerTop_ctl2').click()
# On attend le chargement
delay = 2
except NoSuchElementException:
# Ya pas ! on sort ...
break
for t in liens:
#Verif
print(t)
# Allez, c'est reparti ...
browser.get(t)
# On attend le chargement
delay = 2
# Click sur le lien "Dossier de consultation"
element = browser.find_element_by_id('linkDownloadDce')
browser.execute_script("arguments[0].click();", element)
# On attend le chargement
delay = 2
# Click sur l'option Téléchargement en Anonyme
element = browser.find_element_by_css_selector("input[type='radio'][value='ctl0$CONTENU_PAGE$EntrepriseFormulaireDemande$choixAnonyme']")
browser.execute_script("arguments[0].click();", element)
# On attend le chargement
delay = 1
# Click sur le bouton de commande Téléchargement
element = browser.find_element_by_css_selector("input[type='submit'][value='Valider']")
browser.execute_script("arguments[0].click();", element)
# On attend le chargement
delay = 1
# On récupère le nom du fichier zip pour le renommer ensuite
temp = browser.find_element_by_id("ctl0_CONTENU_PAGE_EntrepriseDownloadDce_nomDce").text
i = temp.find(".zip") + 4
nomzip.append(temp[0:i])
# On attend le chargement
delay = 2
# On récupère le numéro de la consultation
numdce.append(browser.find_element_by_id("ctl0_CONTENU_PAGE_ctl7_reference").text)
# On récupère l'intitulé de la consultation
intitule.append(browser.find_element_by_id("ctl0_CONTENU_PAGE_ctl7_intitule").text)
# On récupère l'objet de la consultation
objet.append(browser.find_element_by_id("ctl0_CONTENU_PAGE_ctl7_objet").text)
# On récupère la date limite de réponse
date_limite.append(browser.find_element_by_id("ctl0_CONTENU_PAGE_ctl7_dateHeureLimiteRemisePlis").text)
# On récupère l'année (selon date limite de réponse)
annee.append(date_limite[-1][6:10])
# Vérification que le fichier n'ait pas été déjà téléchargé
if not(os.path.exists(emplacement_download+'\\'+nomzip[-1])) and not(os.path.exists(emplacement_download+annee[-1]+'\\'+numdce[-1]+' - '+nomzip[-1])):
# Click sur le bouton de commande Téléchargement du Dossier complet
element = browser.find_element_by_link_text("Télécharger le Dossier de consultation")
browser.execute_script("arguments[0].click();", element)
# Patiente jusqu' à ce que le fichier ait été téléchargé
nbs = download_wait(emplacement_download+'\\'+nomzip[-1])
# Fermeture du Browser, il a bien travaillé
browser.close
browser.quit
# Renommage en règle
for l,n,nu,i,o,d,a in zip(liens, nomzip, numdce, intitule, objet, date_limite, annee):
# Vérification que le fichier n'ait pas été renommé
if not os.path.exists(emplacement_download+a+'\\'+nu+' - '+n):
old_file = os.path.join(emplacement_download, f'{n}')
new_file = os.path.join(emplacement_download+a+'\\', f'{nu} - {n}')
os.rename(old_file, new_file)
# Enregistrement dans le csv
with open(emplacement_download+'_liste.csv', 'a+', newline='') as csvfile:
f_csv = csv.writer(csvfile, delimiter=';', quoting=csv.QUOTE_ALL)
f_csv.writerow([l,n,nu,i,o,d,a])
vais industrialiser sur département et métropole, mais à voir aussi pour la région qui est sur une autre plateforme. l’idée est de planifier le traitement : nommage des archives et mise à disposition d’un CSV qui se met à jour.
ça va nous faire un gagner un temps fou, on peut imaginer avoir les marchés de la Soleam, du SPLAIN, et autres babioles. à suivre.
je souhaiterai tagué les DCE selon thématique, et surtout déceler les rendus qui pourront être demandés.