即使通过 webdriver+python 设置浏览器首选项后也无法抑制操作系统下载文件窗口
Posted
技术标签:
【中文标题】即使通过 webdriver+python 设置浏览器首选项后也无法抑制操作系统下载文件窗口【英文标题】:Cannot suppress the OS download file window even after setting browser preference through webdriver+python 【发布时间】:2013-09-26 21:56:52 【问题描述】:我知道以前有人问过这个问题,但在尝试了建议后,我不断得到操作系统下载文件窗口。我想要做的是下载一个 pdf 文件。我已经设置了浏览器首选项,但尽管如此,它并没有抑制操作系统窗口。
这是我写的代码sn-p:
firefoxProfile = webdriver.FirefoxProfile()
firefoxProfile.set_preference('browser.download.folderList', 2)
firefoxProfile.set_preference('browser.download.manager.showWhenStarting', False)
firefoxProfile.set_preference('browser.download.dir', '/media/pinku/Pinku')
firefoxProfile.set_preference('browser.helperApps.alwaysAsk.force', False)
firefoxProfile.set_preference('browser.helperApps.neverAsk.saveToDisk',
'application/octet-stream')
self.driver = webdriver.Firefox(firefoxProfile)
我正在使用 Ubuntu 12.10、Firefox、webdriver、python
【问题讨论】:
【参考方案1】:我认为您可能弄错了 MIME 类型。试试这个
firefoxProfile.set_preference('browser.helperApps.neverAsk.saveToDisk',
'application/pdf,application/x-pdf')
可以找到关于 pdf MIME 类型的讨论here 当您尝试下载 pdf 时,您应该检查您的 firefox 看到的 mime 类型。可能是我服务器设置错了!
旁注:每当这个话题出现(通过 selenium webdriver 下载文件)我强烈建议不要这样做!阅读文章"How To Download Files With Selenium And Why You Shouldn’t" 进行推理。基本上它建议使用其他方式来测试直接下载。
更新:我没有将两种 mime 类型放在一个字符串中,之前这是错误的。我还添加了有关检查服务器实际交付内容的建议。
【讨论】:
您建议的文章很棒,因为它为我提供了另一种测试文件下载的方法。但是,我仍然对为什么上面的代码不起作用感到惊讶?我将 mime 类型更改为 application/x-pdf,甚至尝试了 application/pdf,但它不起作用!仍然显示操作系统窗口.. :( 很遗憾听到它毕竟不是 MIME 类型。您可以尝试设置browser.download.folderList', 1
,但这是一个疯狂的猜测
甚至尝试使用browser.download.folderList', 1
。没用。
您是否检查了您尝试从中获取 pdf 的服务器实际返回的 mime 类型?
我使用 Chrome 浏览器找到了您问题的答案,在 Chrome 开发者工具 (我一直在使用 firefox 24.03(这是 ESR 版本) 这个版本的firefox引入了pdfjs。这将在浏览器中打开 PDF。
所以你需要抑制它。 这是对我有用的代码/firefox 配置文件。
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir","C:\\temp")
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/pdf")
fp.set_preference("plugin.disable_full_page_plugin_for_types", "application/pdf")
fp.set_preference("pdfjs.disabled", True)
driver = webdriver.Firefox(firefox_profile=fp)
有了这个配置文件,我所有的 pdf 下载都转到“C:\temp”
【讨论】:
【参考方案3】:我遇到了类似的问题,因为服务器返回的 mime 类型是“text/plain”而不是“text/csv”。
这对我有用(使用 watir-webdriver):
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.folderList'] = 2 # custom location
profile['browser.download.dir'] = download_directory
profile['browser.helperApps.neverAsk.saveToDisk'] = "text/plain"
browser = Watir::Browser.new :firefox, :profile => profile
更多关于使用 watir-webdriver 下载的信息:http://watirwebdriver.com/browser-downloads/
【讨论】:
以上是关于即使通过 webdriver+python 设置浏览器首选项后也无法抑制操作系统下载文件窗口的主要内容,如果未能解决你的问题,请参考以下文章
在python里用selenium webdriver打开火狐浏览器后总是报错?
Python WebDriver + Firefox 文件下载
Python+Selenium笔记:WebDriver和WebElement
在 url 中嵌入凭据以使用 selenium webdriver 加载网站