Dans un premier temps, j'ai essayé de définir le dossier de téléchargement par défaut.Comment puis-je télécharger quelque chose avec Selenium et Chrome?
J'ai essayé 5 options, mais aucun d'entre eux travaillaient:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Selenium example for downloading a webpage."""
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import os
import time
def main():
"""Download an opened PDF page."""
browser = get_browser()
url = "https://martin-thoma.com/pdf/cv-curriculum-vitae.pdf"
browser.get(url) # Open a PDF page
# el = browser.find_element_by_id("plugin")
time.sleep(5)
ActionChains(browser).send_keys(Keys.CONTROL, "s").perform()
print(browser.current_url)
time.sleep(60) # Keep the browser open for 60s
def get_browser():
"""Get the browser (a "driver")."""
# find the path with 'which chromedriver'
path_to_chromedriver = ('/home/moose/GitHub/algorithms/scraping/'
'venv/bin/chromedriver')
download_dir = "/home/moose/selenium-download/"
print("Is directory: {}".format(os.path.isdir(download_dir)))
fail = 6
options = None
desired_caps = None
if fail == 1:
# Fail (1)
os.environ['XDG_DOWNLOAD_DIR'] = download_dir
elif fail == 2:
# Fail (2)
options = webdriver.ChromeOptions()
options.add_argument("download.default_directory={}"
.format(download_dir))
elif fail == 3:
# Fail (3)
options = webdriver.ChromeOptions()
prefs = {"download.default_directory": download_dir}
options.add_experimental_option("prefs", prefs)
elif fail == 4:
# Fail (4)
desired_caps = {'prefs':
{'download': {'default_directory': download_dir,
'directory_upgrade': "true",
'extensions_to_open': ""}}}
elif fail == 5:
# Fail (5)
desired_caps = {'prefs':
{'download.default_directory': download_dir}}
elif fail == 6:
# Fail (6)
desired_caps = {'prefs':
{'download': {'default_directory': download_dir,
'directory_upgrade': True,
'extensions_to_open': ""}}}
browser = webdriver.Chrome(executable_path=path_to_chromedriver,
chrome_options=options,
desired_capabilities=desired_caps)
return browser
if __name__ == '__main__':
main()
Je sais qu'il ya des moyens plus simples à télécharger un PDF par URL. Cependant, mon utilisation réelle est beaucoup plus compliquée et le téléchargement est déclenché par un clic généré par javascript sur un lien derrière un processus de connexion en 3 étapes qui est purement fait avec JavaScript.
Donc, cette question a deux aspects:
- Comment puis-je changer le répertoire de téléchargement par défaut avec Sélénium et Chrome (sur Ubuntu 16.04)?
- Comment télécharger un PDF ouvert? (J'ai essayé une chaîne d'action, mais cela ne fonctionne pas)
J'ai Google Chrome Version 59.0.3071.115 (Official Build) (64-bit)
, téléchargé via l'installateur pip.
Il est un peu difficile de dire quel est le problème sans voir votre code/cas d'utilisation réel. Le fichier PDF est-il chargé avec le plugin (c'est-à-dire qu'il n'est pas intégré et que vous voyez les icônes habituelles de téléchargement, de zoom etc.)? Est-ce que vous vous connectez et ouvrez un pdf en une étape (je pense au scénario lorsque vous cliquez sur quelque chose que vous n'avez pas la permission d'accéder et un popup ... errr ... apparaît)? Avez-vous besoin d'utiliser un driver chromé? Peut-être pourriez-vous utiliser Firefox. La même astuce fonctionne aussi (évidemment avec une manière un peu différente de définir les préférences) et pourrait résoudre votre problème. – user2986898
(1) Je vois les icônes habituelles de téléchargement/zoom. (2) Je viens de réaliser qu'il s'agit de "Chromium Version 60.0.3112.78" sur l'autre machine. Je vais arranger ça. –
Ok, avec Chrome ça marche, avec Chrome ce n'est pas le cas. –