J'utilise Selenium Webdriver (en Python) pour automatiser le téléchargement de milliers de fichiers. Je souhaite définir le dossier de téléchargement de Chrome par programme. Après avoir lu ceci , j'ai essayé ceci:
chromepath = '/Users/thiagomarzagao/Desktop/searchcode/chromedriver'
desired_caps = {'prefs': {'download': {'default_directory': '/Users/thiagomarzagao/Desktop/downloaded_files/'}}}
driver = webdriver.Chrome(executable_path = chromepath, desired_capabilities = desired_caps)
Pas bien. Les téléchargements vont toujours dans le dossier de téléchargement par défaut ("/ Utilisateurs/thiagomarzagao/Téléchargements").
Des pensées?
(Python 2.7.5, Selenium 2.2.0, Chromedriver 2.1.210398, Mac OS X 10.6.8)
Ce qui suit a fonctionné pour moi:
chromeOptions = webdriver.ChromeOptions()
prefs = {"download.default_directory" : "/some/path"}
chromeOptions.add_experimental_option("prefs",prefs)
chromedriver = "path/to/chromedriver.exe"
driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chromeOptions)
Source: https://sites.google.com/a/chromium.org/chromedriver/capabilities
Si quelqu'un a toujours des problèmes et que les solutions ci-dessus ne fonctionnent pas, j'ai trouvé l'ajout d'une barre oblique suivante ('\') à mon chemin de téléchargement.
Le mien ressemblait à ceci:
if browser == 'chrome':
options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
prefs = {"profile.default_content_settings.popups": 0,
"download.default_directory": r"C:\Users\user_dir\Desktop\\", # IMPORTANT - ENDING SLASH V IMPORTANT
"directory_upgrade": True}
options.add_experimental_option("prefs", prefs)
return webdriver.Chrome(executable_path=Base.chromedriver_dir, chrome_options=options)
Je pense que vous avez aussi besoin
"directory_upgrade": true
Utilisation du dictionnaire directement dans un fichier "Préférences" de Chrome, lors d’une installation Windows locale de la version chrome 28.0.1500.95 m, avec les options de téléchargement suivantes:
"download": {
"default_directory": "C:\\Users\\rdub\\Desktop",
"extensions_to_open": ""
},
Je reçois l'emplacement par défaut, par rapport au bureau. Quand je le change en ceci:
"download": {
"default_directory": "C:\\Users\\rdub\\Desktop",
"directory_upgrade": true,
"extensions_to_open": ""
},
Je reçois l'emplacement du bureau.
Essayez ce qui suit:
desired_caps = {'prefs': {'download': {'default_directory': '/Users/thiagomarzagao/Desktop/downloaded_files/', "directory_upgrade": true, "extensions_to_open": ""}}}
J'essaie toutes les réponses à cette question, mais cela ne fonctionne pas pour mon in Ubuntu 16.10. J'ajoute donc la modification avec os.environ pour la variable XDG_DOWNLOAD_DIR. Ce qui ne marche pas, mais je pense que ça aide.
C'est:
os.environ['XDG_DOWNLOAD_DIR'] = default_download_directory
Le vrai changement que fonctionne parfaitement pour moi est de configurer le dossier de téléchargement via la commande xdg-user-dirs-update via un appel système en temps d'exécution:
os.system("xdg-user-dirs-update --set DOWNLOAD " + default_download_directory)
Ainsi, tout mon code lié à la configuration du répertoire de téléchargement est le suivant:
import os
from Selenium import webdriver
default_download_directory = str(os.path.dirname(os.path.abspath(__file__))) + "/download"
os.environ['XDG_DOWNLOAD_DIR'] = default_download_directory
os.system("xdg-user-dirs-update --set DOWNLOAD " + default_download_directory)
desired_caps = {
'prefs': {
'download': {
'default_directory': str(os.path.dirname(os.path.abspath(__file__))) + "/download",
"directory_upgrade": "true",
"extensions_to_open": ""
}
}
}
options = webdriver.ChromeOptions()
options.add_argument("download.default_directory=" + str(os.path.dirname(os.path.abspath(__file__))) + "/download")
browser = webdriver.Chrome(chrome_options=options, desired_capabilities=desired_caps)
Pour ceux qui se demandent encore pourquoi leur implémentation ne fonctionne pas: vous devez mettre le chemin complet pour que cela fonctionne. par exemple. '/ Users/you/dlfolder' ne fonctionnera pas, alors que 'C:/Users/you/dlfolder' fonctionnera.