2017-08-17 1 views
0

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:

  1. Comment puis-je changer le répertoire de téléchargement par défaut avec Sélénium et Chrome (sur Ubuntu 16.04)?
  2. 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.

Répondre

1

Tout d'abord vous devez

from selenium.webdriver.chrome.options import Options

Et changer l'ensemble si le bloc et l'initialisation du navigateur get_browser() à ceci:

chrome_options = Options() 
chrome_options.add_experimental_option('prefs', { 
    "plugins.plugins_list": [{"enabled":False,"name":"Chrome PDF Viewer"}], 
    "download": { 
     "prompt_for_download": False, 
     "default_directory" : download_dir 
    } 
}) 

browser = webdriver.Chrome(path_to_chromedriver, chrome_options=chrome_options) 

(j'utilise Windows, mais il ne devrait pas y avoir de différences

+0

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

+0

(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. –

+0

Ok, avec Chrome ça marche, avec Chrome ce n'est pas le cas. –