PythonMan
PythonMan

Reputation: 897

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()

Upvotes: 4

Views: 2686

Answers (1)

Florent B.
Florent B.

Reputation: 42518

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"})

Upvotes: 9

Related Questions