如何使用 selenium / firefox / python 切换下载目录?

Der*_*den 5 python firefox selenium

我知道以前有人问过这个问题……但我尝试了多种方法,出于某种原因,我从驱动程序下载的任何内容都会进入我的下载文件夹。

基本上我导航到一个网站并通过点击下载链接下载一些东西,如下所示:

result.click()
Run Code Online (Sandbox Code Playgroud)

这可以很好地下载文件。但我想将其下载到特定目录。我尝试使用这些方法来更改下载目录:

driver = webdriver.Firefox()
profile = webdriver.FirefoxProfile()

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"})
Run Code Online (Sandbox Code Playgroud)

profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", directory)
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-gzip")
Run Code Online (Sandbox Code Playgroud)

directory我想要的位置在哪里。

这些都不起作用......谁能解释为什么或告诉我如何实际实现这一目标?

谢谢

leo*_*leo 28

截至 2021 年,FirefoxProfile早期答案中使用的类已被弃用,对于新的selenium.webdriver.firefox.options.Options

from selenium.webdriver.firefox.options import Options

options = Options()
options.set_preference("browser.download.folderList", 2)
options.set_preference("browser.download.manager.showWhenStarting", False)
options.set_preference("browser.download.dir", "./downloads")
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-gzip")

driver = webdriver.Firefox(options=options)
Run Code Online (Sandbox Code Playgroud)


Kas*_*raa 6

您正在使用默认配置文件初始化浏览器,因为您没有将任何配置文件参数传递给您的浏览器webdriver.Firefox()

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

driver = webdriver.Firefox(profile)
Run Code Online (Sandbox Code Playgroud)

  • 一旦驱动程序初始化,这是否允许我多次更改目录? (2认同)
  • 这不允许您在运行时更改首选项。您必须通过 about:config 来完成此操作。检查此示例https://tarunlalwani.com/post/change-profile-settings-at-runtime-firefox-selenium/ (2认同)

Man*_*ara 3

下面的选项,它对我来说工作得很好。

# set download options
download_path = DOWNLOADS_PATH

# 0 means to download to the desktop, 1 means to download to the default "Downloads" directory, 2 means to use the directory
firefox_options.set_preference("browser.download.folderList", 2)
firefox_options.set_preference("browser.download.dir", download_path)
Run Code Online (Sandbox Code Playgroud)