Downloading file to specified location with Selenium and python
You need to make Firefox
save this particular file type automatically.
This can be achieved by setting browser.helperApps.neverAsk.saveToDisk
preference:
from selenium import webdriverprofile = 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()
More explanation:
browser.download.folderList
tells it not to use defaultDownloads
directorybrowser.download.manager.showWhenStarting
turns of showing download progressbrowser.download.dir
sets the directory for downloadsbrowser.helperApps.neverAsk.saveToDisk
tells Firefox to automatically download the files of the selectedmime-types
You can view all these preferences at about:config
in the browser. There is also a very detailed documentation page available here: About:config entries.
Besides, instead of using xpath
approach, I would use find_element_by_partial_link_text()
:
driver.find_element_by_partial_link_text("DEV.tgz").click()
Also see:
If the application is generated dynamically (mime-types) using Chrome browser will be a better approach since the Chrome will not open the file download pop-up.But multiple download option should be enabled if you need multiple downloads.