Downloading File to Specified Location with Selenium and Python

Downloading a file at a specified location through python and selenium using Chrome driver

Update 2018:

Its not valid Chrome command line switch, see the source code use hoju answer below to set the Preferences.

Original:

You can create a profile for chrome and define the download location for the tests. Here is an example:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("download.default_directory=C:/Downloads")

driver = webdriver.Chrome(chrome_options=options)

How do I make my selenium code download the file in a particular location?

df1.to_excel('output1.xlsx', engine='xlsxwriter')  

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html

How to download files in customized location using Selenium ChromeDriver and Chrome

To download the required file within Automation Demo Site to a specific folder using Selenium, ChromeDriver and google-chrome you need to pass the preference "download.default_directory" along with the value (location of the directory) through add_experimental_option() and you can use the following solution:

Code Block:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_experimental_option("prefs", {
"download.default_directory": r"C:\Data_Files\output_files"
})
s = Service('C:\\BrowserDrivers\\chromedriver.exe')
driver = webdriver.Chrome(service=s, options=options)
driver.get("http://demo.automationtesting.in/FileDownload.html")
driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Download"))))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "textbox"))).send_keys("testing")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "createTxt"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "link-to-download"))).click()

Snapshot:

chrome_download

give remote driver capability to download a file to specified location

The download directory you're specifying needs to be a directory on the remote server. Selenium doesn't provide a way to fetch downloads through a remote. If you have access, you can scp it from the server.

How to download a file using the remote selenium webdriver?

Selenium Python, How can I download a PDF to a specific location without having the url

It seems that the default configuration of chrome is to disable the download for security reasons. You may change this in the options. I am attaching a working example based on Arxiv which has safe pdf downloads:

options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {
"download.default_directory": os.path.join(os.getcwd(),"Downloads"), #Set directory to save your downloaded files.
"download.prompt_for_download": False, #Downloads the file without confirmation.
"download.directory_upgrade": True,
"plugins.always_open_pdf_externally": True #Disable PDF opening.
})

driver = webdriver.Chrome(os.path.join(os.getcwd(),"Downloads","chromedriver"),options=options) #Replace with correct path to your chromedriver executable.

driver.get("https://arxiv.org/list/hep-lat/1902") #Base url

driver.find_elements(By.XPATH,"/html/body/div[5]/div/dl/dt[1]/span/a[2]")[0].click() #Clicks the link that would normally open the PDF, now download. Change to fit your needs


Related Topics



Leave a reply



Submit