Firefox+Selenium WebDriver自动下载.msg文件失败问题求助
解决Firefox Profile自动下载.msg文件及批量类型设置问题
1. .msg文件的正确MIME类型
你尝试的application/vnd.ms-outlook并不是Firefox 60识别.msg文件的可靠类型,**application/x-msoutlook**才是这个版本Firefox对.msg文件的标准识别类型。
不过这里有个关键细节:Firefox是根据服务器返回的Content-Type响应头来判断文件类型的,部分服务器可能会返回非标准类型(比如application/octet-stream甚至text/plain)。你可以通过以下方式确认实际的MIME类型:
- 打开Firefox开发者工具(F12),切换到「网络」面板
- 触发.msg文件下载请求,查看该请求响应头中的
Content-Type字段 - 将这个实际返回的类型添加到你的MIME列表中
修改后的代码片段(替换.msg的MIME类型):
String mimeTypes = "application/zip,application/octet-stream,application/x-msoutlook"; FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("browser.download.dir", path); profile.setPreference("browser.download.folderList", 2); profile.setPreference("browser.download.manager.showWhenStarting", false); profile.setPreference("browser.helperApps.alwaysAsk.force", false); profile.setPreference("browser.helperApps.neverAsk.saveToDisk", mimeTypes);
2. 设置自动保存所有文件类型,无需罗列MIME
在Firefox 60中,你可以通过通配符*/*匹配所有MIME类型,实现无需逐个添加类型的自动保存,同时配合几个额外偏好确保功能生效:
FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("browser.download.dir", path); profile.setPreference("browser.download.folderList", 2); profile.setPreference("browser.download.manager.showWhenStarting", false); profile.setPreference("browser.helperApps.alwaysAsk.force", false); // 用通配符匹配所有MIME类型 profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "*/*"); // 禁用下载完成提示弹窗 profile.setPreference("browser.download.manager.showAlertOnComplete", false); // 禁止下载管理器窗口弹出 profile.setPreference("browser.download.manager.useWindow", false);
关于「连续下载仅首个MIME类型生效」的问题
这个问题大概率是Firefox 60下载管理器的缓存机制导致,或是偏好设置未被完整加载。你可以尝试以下解决方案:
- 确保所有
profile.setPreference操作都在初始化FirefoxDriver之前完成 - 若使用临时Profile,尝试创建持久化Profile测试(避免每次启动重置设置)
- 检查是否有浏览器扩展或默认设置干扰了下载偏好
内容的提问来源于stack exchange,提问作者Ragnarsson
相关产品推荐
相关产品推荐

