web-dev-qa-db-fra.com

Téléchargement du fichier à l'emplacement spécifié avec Selenium et python

Ok jusqu'à présent, ma programmation va sur le site Web à partir duquel je souhaite télécharger le lien et le sélectionner, puis la boîte de dialogue Firefox s'affiche et je ne sais pas quoi faire. je veux enregistrer ce fichier dans un dossier sur mon bureau. Je l'utilise pour une construction nocturne, j'ai donc besoin de cela pour fonctionner. Veuillez aider.

Voici mon code qui saisit le lien de téléchargement à partir du site Web:

driver = web driver.Firefox()
driver.implicitly_wait(5)
driver.get("Name of web site I'm grabbing from")
driver.find_element_by_xpath("//a[contains(text(), 'DEV.tgz')]".click()
25
Jerad Bill

Vous devez faire en sorte que Firefox enregistre automatiquement ce type de fichier particulier.

Ceci peut être réalisé en définissant la préférence browser.helperApps.neverAsk.saveToDisk:

from Selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", 'PATH TO DESKTOP')
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-gzip")

driver = webdriver.Firefox(firefox_profile=profile)
driver.get("Name of web site I'm grabbing from")
driver.find_element_by_xpath("//a[contains(text(), 'DEV.tgz')]").click()

Plus d'explication:

  • browser.download.folderList Lui dit de ne pas utiliser le répertoire Downloads par défaut
  • browser.download.manager.showWhenStarting Affiche la progression du téléchargement
  • browser.download.dir Définit le répertoire des téléchargements
  • browser.helperApps.neverAsk.saveToDisk Demande à Firefox de télécharger automatiquement les fichiers du mime-types Sélectionné

Vous pouvez afficher toutes ces préférences dans about:config Dans le navigateur. Il y a aussi une page de documentation très détaillée disponible ici: À propos: entrées de configuration .

De plus, au lieu d'utiliser l'approche xpath, j'utiliserais find_element_by_partial_link_text() :

driver.find_element_by_partial_link_text("DEV.tgz").click()

Regarde aussi:

55
alecxe

Si l'application est générée dynamiquement (types mime) en utilisant Chrome sera une meilleure approche car le Chrome n'ouvrira pas la fenêtre contextuelle de téléchargement de fichier). Mais l'option de téléchargement multiple doit être activée si vous avez besoin de plusieurs téléchargements.

1