2017-08-17 1 views
0

最初の手順として、デフォルトのダウンロードフォルダを設定しようとしました。SeleniumとChromeで何かをダウンロードできますか?

私は5つのオプションを試してみましたが、それらのどれも働いた:

#!/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() 

私はURLでPDFをダウンロードするためのシンプルな方法があります知っています。しかし、私の本物のユースケースははるかに複雑でダウンロードはJavaScriptを使って行われている3ステップのログインプロセスの後ろにあるリンクをクリックすることによって発生します。

だから、この質問には二つの側面があります。

  1. 私は(Ubuntuの16.04で)セレンとChromeをデフォルトのダウンロードディレクトリを変更するにはどうすればよいですか?
  2. 開いているPDFをダウンロードするにはどうすればよいですか? (私はアクションチェーンを試しましたが動作しません)

私はGoogle Chrome Version 59.0.3071.115 (Official Build) (64-bit)をpipインストーラからダウンロードしました。

答えて

1

まずあなたが

from selenium.webdriver.chrome.options import Options

とブロックと、ブラウザの初期化する場合は、このへget_browser()全体を変更する必要があります。

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) 

(私はWindowsを使用するが、任意の違いがあってはなりません。)

+0

あなたのコードや実際のユースケースを見ることなく、問題が何であるかを知るのは少し難しいです。 pdfにプラグインがロードされていますか(つまり、埋め込まれておらず、通常のダウンロード、ズームなどのアイコンが表示されます)。ログインしてpdfを1ステップで開きますか(アクセス権とポップアップがないものをクリックするとシナリオを考えています... errr ... pops up)?クロームドライバを使用する必要がありますか?多分あなたはFirefoxを使うことができます。同じトリックもそれに作用します(明らかに好みを設定する少し異なる方法で)あなたの問題を解決するかもしれません。 – user2986898

+0

(1)通常のダウンロード/ズームアイコンが表示されます。 (2)他のマシンで「Chromium Version 60.0.3112.78」と認識しました。私はそれを修正します。 –

+0

いいえ、クロムで動作しますが、クロムでは動作しません。 –

関連する問題