如何使用selenium/firefox/python更改下载目录?

14

我知道这个问题以前已经被问过了...但是我尝试了多种方法,但不知为何从驱动程序下载的任何东西都会放在我的“下载”文件夹中。

基本上,我通过点击下载链接从网站下载某些东西,就像这样:

result.click()

这个可以成功下载文件。但是我想要将它下载到特定的目录中。我尝试了以下方法来改变下载目录:

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

并且

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

directory 是我想要的位置。

这两个都没有起作用...有人能解释一下为什么或者告诉我如何实现吗?

谢谢


确保您使用正确的配置文件初始化驱动程序,并确保您的目录有效。此外,请尝试使用正斜杠而不是反斜杠。 - Kasem Alsharaa
如何使用配置文件初始化?我的代码看起来像这样:driver = webdriver.Firefox() driver.get(url) profile = webdriver.FirefoxProfile() - Derek Eden
初始化时使用配置文件是否允许我反复更改该配置文件的下载目录,而无需重新初始化? - Derek Eden
如何使用配置文件进行初始化? - AMC
这个回答解决了你的问题吗?使用Selenium和Python将文件下载到指定位置 - AMC
3个回答

25

截至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)

5

如果您没有传递任何配置文件参数给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)

啊...这就是我一直在找的...我的错,它很明显 - 第一次使用Selenium...等我有时间了我会试试看,但看起来应该可以用...谢谢。 - Derek Eden
2
初始化驱动程序后,这是否允许我多次更改目录? - Derek Eden
2
这不允许您在运行时更改首选项。您必须通过 about:config 进行更改。请参考此示例 https://tarunlalwani.com/post/change-profile-settings-at-runtime-firefox-selenium/ - Kasem Alsharaa
1
在运行时不能更改首选项,它只能在驱动程序创建时初始化一次。 - Manali Kagathara
这会允许我在驱动程序初始化后多次更改目录吗?@DerekEden你需要做什么?有没有其他方法可以解决? - AMC
显示剩余2条评论

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)

1
如何使用配置文件初始化驱动程序?我尝试了您在原始帖子中展示的方法。 - Derek Eden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接