Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium firefox profile update download directory after creating webdriver

I'm wondering how can I update/change download location in selenium once I started driver?

it is not problem to set download dir during creation of profile and initiation of webdriver. The problem appears after initiation of webdriver to change directory depending on data type.

For example -if dl doc is word save in Docs\Word -if dl doc is pdf save in Docs\pdf

this is my code

profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir', os.getcwd())
profile.set_preference("browser.download.folderList", 2)
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/download,application/octet-stream,application/pdf')
profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=profile)
driver.delete_all_cookies()
sleep(10)
# this part doesn't work
driver.profile.set_preference('browser.download.dir',"{0}\{1}".format(os.getcwd(),"Docs"))
driver.profile.update_preferences()
like image 302
PythonMan Avatar asked Jan 28 '23 21:01

PythonMan


1 Answers

With Firefox it's possible to change the preferences at run-time with a scrip injection once the context is set to chrome:

def set_download_dir(driver, directory):
  driver.command_executor._commands["SET_CONTEXT"] = ("POST", "/session/$sessionId/moz/context")
  driver.execute("SET_CONTEXT", {"context": "chrome"})

  driver.execute_script("""
    Services.prefs.setBoolPref('browser.download.useDownloadDir', true);
    Services.prefs.setStringPref('browser.download.dir', arguments[0]);
    """, directory)

  driver.execute("SET_CONTEXT", {"context": "content"})
like image 110
Florent B. Avatar answered Jan 31 '23 10:01

Florent B.