web-dev-qa-db-fra.com

définition des préférences de Chrome avec Selenium Webdriver en Python

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)

17
Parzival

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

43
MervS

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)
7
yvesva

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": ""}}}
3
R Dub

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)
1
shakaran

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.

0
Camilo Fosco