如何使用Firefox驱动程序,Selenium,python下载XML文件

时间:2020-10-27 14:23:44

标签: python selenium firefox

我正在使用Selenium编写脚本,以从基于MediaWiki的网站的导出页面导出XML备份。

我希望将XML文件下载到目录中,而绕过通常询问我如何处理该文件的弹出窗口。

下载.xml时,当我查看“网络”选项卡时,我在响应标题下看到的文件的内容类型为 application / xml; charset = utf-8

Screenshot from Network tab on Firefox

在阅读了herethis reddit post的一些答案之后,我正在使用:

fp = webdriver.FirefoxProfile()
fp.set_preference("browser.preferences.instantApply",True)
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain, application/octet-stream, text/xml, application/xml")
fp.set_preference("browser.helperApps.alwaysAsk.force",False)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.folderList",2)
    
driver = webdriver.Firefox(firefox_profile=fp, executable_path=r'C:\Python37\geckodriver.exe')
(...)
download_button.click()

但是,该窗口仍会弹出,并且文件未在任何地方下载。

我确保更新Selenium和geckodriver。

我在做什么错了?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你应该传递一个元组作为参数,像这样:

fp.set_preference('browser.helperApps.neverAsk.saveToDisk', (text/plain, application/octet-stream, text/xml, application/xml))

它对我有用。 PS:忽略我糟糕的英语,我是巴西人。

答案 1 :(得分:0)

对我来说,经过多次反复试验,这行得通(它是 Java,但应该可以转移到 Python):

profile.setPreference("browser.download.viewableInternally.previousHandler.alwaysAskBeforeHandling.xml", false);
profile.setPreference("browser.download.viewableInternally.previousHandler.preferredAction.xml", 0);
profile.setPreference("browser.download.viewableInternally.typeWasRegistered.xml", true);