python - 如何使用 Firefox 驱动程序、Selenium、python 下载 XML 文件
问题描述
我正在编写一个脚本,使用 Selenium 从基于 MediaWiki 的网站的导出页面导出 XML 备份。
我希望将 XML 文件下载到一个目录,绕过通常询问我如何处理该文件的弹出窗口。
当我在下载 .xml 时查看网络选项卡时,我看到(在响应标头下)内容类型为application/xml 的文件;字符集=utf-8。
在阅读了此处的一些答案以及此 reddit 帖子后,我正在使用:
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。
我究竟做错了什么?
谢谢!
解决方案
经过对我的反复试验,这很有效(它是 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);
推荐阅读
- java - gradle-clover-plugin 从单独的模块获取代码覆盖率
- javascript - 上传文件时更改文件名
- javascript - Create React App 展示的是 serviceWorker.js 而不是很多教程展示的 registerServiceWorker
- assembly - 从使用 nasm 制作的基本 PE+ uefi 应用程序调用 ExitBootServices 时遇到问题
- jquery - 通过 jQuery.html() 时 ASP 页面链接不可用
- php - 如何在不使用 required_once 的情况下设计基于 pico CMS 的简单插件?
- angular - patchValue 只是不起作用!有什么作用?
- rust - 如何在 Rust 中将 u8 转换为 &[u8]?
- go - 无法将本地包调用到 main
- java - 动态规划 - 具有最大切割和实际解决方案的棒切割问题