web-dev-qa-db-ja.com

Seleniumとpythonを使用して指定された場所にファイルをダウンロードする

これまでのところ、リンクをダウンロードしたいウェブサイトにプログラミングを行って選択すると、firefoxダイアログボックスが表示され、何をすべきかわかりません。このファイルをデスクトップ上のフォルダーに保存したい。私はこれをナイトリービルドに使用しているので、これが機能する必要があります。助けてください。

以下は、Webサイトからダウンロードリンクを取得する私のコードです。

driver = web driver.Firefox()
driver.implicitly_wait(5)
driver.get("Name of web site I'm grabbing from")
driver.find_element_by_xpath("//a[contains(text(), 'DEV.tgz')]".click()
25
Jerad Bill

Firefoxにこの特定のファイルタイプを自動的に保存させる必要があります。

これは、_browser.helperApps.neverAsk.saveToDisk_プリファレンスを設定することで実現できます。

_from Selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", 'PATH TO DESKTOP')
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-gzip")

driver = webdriver.Firefox(firefox_profile=profile)
driver.get("Name of web site I'm grabbing from")
driver.find_element_by_xpath("//a[contains(text(), 'DEV.tgz')]").click()
_

詳細説明:

  • _browser.download.folderList_は、デフォルトのDownloadsディレクトリを使用しないように指示します
  • _browser.download.manager.showWhenStarting_はダウンロードの進行状況を表示します
  • _browser.download.dir_はダウンロード用のディレクトリを設定します
  • _browser.helperApps.neverAsk.saveToDisk_は、選択した_mime-types_のファイルを自動的にダウンロードするようFirefoxに指示します

これらの設定はすべて、ブラウザの_about:config_で表示できます。また、非常に詳細なドキュメントページも利用できます: About:config entries

また、xpathアプローチを使用する代わりに、 find_element_by_partial_link_text() を使用します。

_driver.find_element_by_partial_link_text("DEV.tgz").click()
_

参照:

55
alecxe

Chromeを使用してアプリケーションが動的に生成される場合(mime-types)は、Chromeはファイルのダウンロードポップアップを開かないため、ブラウザの方が適しています。ただし、複数のダウンロードが必要な場合は、複数のダウンロードオプションを有効にする必要があります。