2016-11-02 30 views
0

私は、リンクをクリックすると新しいウィンドウが開き、すぐにcsvをダウンロードするWebページをスクラップしようとしています。私はかなり密度の高いjavascriptであるので、私はURLの形式を把握することができませんでした(とonClickプロパティを介して呼び出される別の1つの機能はhrefプロパティの一部として呼び出されます。新しいポップアップウィンドウを使ってファイルをダウンロードすることは必ずしもセレンでできることではないと私は読んでいた。seleniumを使用してwindow.openからファイルをダウンロード

アドバイスをいただければ幸いである。A this is possiblehere's how you'd do itが広く詳細にスケッチされているように非常に役に立ちます。ありがとう!

明らかに、私の難しさは、私がどのようにファイルをダウンロードするURLが生成されます。 Google Chromeのネットワークコールを見ても、私はそれがどこにあるのかわかりませんし、これを追跡するのに数時間かかるかもしれないので、ブラウザの特定のテキストをクリックして解決するのではなく、舞台裏の面倒な機械。

答えて

0

Firefox webdriverを使用してファイルをダウンロードする方法は次のとおりです。基本的にブラウザプロファイルを作成して、特定のファイルタイプのデフォルトのダウンロード場所を設定します。ファイルがその場所に存在するかどうかを確認できます。

import os 
from selenium import webdriver 

browser_profile = webdriver.FirefoxProfile() 

# add the file_formats to download 
file_formats = ','.join(["text/plain", 
         "application/pdf", 
         "application/x-pdf", 
         "application/force-download"]) 

preferences = { 
    "browser.download.folderList": 2, 
    "browser.download.manager.showWhenStarting": False, 
    "browser.download.dir": os.getcwd(), # will download to current directory 
    "browser.download.alertOnEXEOpen": False, 
    "browser.helperApps.neverAsk.saveToDisk": file_formats, 
    "browser.download.manager.focusWhenStarting": False, 
    "browser.helperApps.alwaysAsk.force": False, 
    "browser.download.manager.showAlertOnComplete": False, 
    "browser.download.manager.useWindow": False, 
    "services.sync.prefs.sync.browser.download.manager.showWhenStarting": False, 
    "pdfjs.disabled": True 
} 

for pref, val in preferences.items(): 
    browser_profile.set_preference(pref, val) 

browser_binary = webdriver.firefox.firefox_binary.FirefoxBinary() 
browser = webdriver.Firefox(firefox_binary=browser_binary, 
          firefox_profile=browser_profile) 

# set the file name that will be saved as when you download is complete 
file_name = 'ABC.txt' 

# goto the link to download the file from it will be automatically 
# downloaded to the current directory 
file_url = 'http://yourfiledownloadurl.com' 
browser.get(file_url) 

# verify if the expected file name exists in the current directory 
path = os.path.join(os.getcwd(), file_name) 
assert os.path.isfile(path) 
+0

ありがとうございます。これは、あなたがコードを共有するのに本当に寛大です。私は私の記事から、ファイルがダウンロードされているURLを見つけることは非常に難しいと私は分かりませんでしたが、それは私の困難を提示しているものの一部です。ファイルをダウンロードするために「クリック」したいテキストを選択するようにコードを変更することは可能ですか? – helloB

+0

@helloB 'browser.get'を' browser.find_element_by_xpath(xpath).click() 'に置き換えることができ、それでもデフォルトのディレクトリにダウンロードされます。 –

+0

素晴らしい、これを試しに行く、ありがとう、キラン! – helloB

関連する問題