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?
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
})
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:
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
).
Quelques conseils:
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
.
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,
~/.config/chromium/Default/Preferences
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)