web-dev-qa-db-fra.com

Comment utiliser chrome webdriver dans Selenium pour télécharger des fichiers en python?

Sur la base des messages ici et ici J'essaie d'utiliser un pilote Web Chrome dans Selenium pour pouvoir télécharger un fichier. Voici le code jusqu'à présent

from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--disable-extensions")
chrome_options.add_experimental_option("profile.default_content_settings.popups", 0)
chrome_options.add_experimental_option("download.Prompt_for_download", "false")
chrome_options.add_experimental_option("download.default_directory", "/tmp")

driver = webdriver.Chrome(chrome_options=chrome_options)

Mais cela seul entraîne l'erreur suivante:

WebDriverException: Message: unknown error: cannot parse capability: chromeOptions
from unknown error: unrecognized chrome option: download.default_directory
  (Driver info: chromedriver=2.24.417424 (c5c5ea873213ee72e3d0929b47482681555340c3),platform=Linux 4.10.0-37-generic x86_64)

Alors, comment résoudre ce problème? Dois-je utiliser cette fonctionnalité? Si oui, comment exactement?

8
Alex

Essaye ça. Exécuté sur les fenêtres

( Comment contrôler le téléchargement de fichiers avec des liaisons Selenium Python dans Chrome )

from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options

options = Options()
options.add_experimental_option("prefs", {
  "download.default_directory": r"C:\Users\xxx\downloads\Test",
  "download.Prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True
})
14
Satish

De votre exception, vous utilisez chromedriver=2.24.417424.

Quelles sont les versions des navigateurs Selenium et Chrome que vous utilisez?

J'ai essayé le code suivant avec:

  • Sélénium 3.6.0
  • chromedriver 2.33
  • Google Chrome 62.0.3202.62 (version officielle) (64 bits)

Et il fonctionne:

from Selenium import webdriver

download_dir = "/pathToDownloadDir"
chrome_options = webdriver.ChromeOptions()
preferences = {"download.default_directory": download_dir ,
               "directory_upgrade": True,
               "safebrowsing.enabled": True }
chrome_options.add_experimental_option("prefs", preferences)
driver = webdriver.Chrome(chrome_options=chrome_options,executable_path=r'/pathTo/chromedriver')

driver.get("urlFileToDownload");

Assurez-vous que vous utilisez un navigateur compatible avec votre lecteur chromedriver (à partir de ici , devrait être Chrome v52-54).

0
Davide Patti

Quelques conseils:

  1. chrome et chromedriver devraient avoir la même version.

    Généralement, les paquets de chrome doivent avoir chromedriver à l'intérieur, vous pouvez les trouver dans le répertoire d'installation. Si vous utilisez ubuntu/debian, exécutez dpkg -L chromium-chromedriver.

  2. Avoir une configuration correcte des préférences Chrome.

    comme Satish l'a dit, utilisez options.add_experimental_option("prefs", ...) pour configurer Selenium + chrome. Mais parfois, la configuration peut changer avec le temps. Le moyen le plus sûr d'obtenir les préférences les plus récentes et les plus exploitables est de le vérifier dans le répertoire de configuration du chrome. Par exemple, 

    • Lancer un chrome dans le bureau Xorg
    • Modifier les paramètres dans le menu
    • Quitter le chrome
    • Découvrez les paramètres réels dans ~/.config/chromium/Default/Preferences
    • Lisez-le, choisissez les options exactes dont vous avez besoin.

Dans mon cas, le code est:

from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities

options = webdriver.ChromeOptions()
options.gpu = False
options.headless = True
options.add_experimental_option("prefs", {
    "download.default_directory" : "/data/books/chrome/",
    'profile.default_content_setting_values.automatic_downloads': 2,
    })

desired = options.to_capabilities()
desired['loggingPrefs'] = { 'performance': 'ALL'}
driver = webdriver.Chrome(desired_capabilities=desired)
0
talebook