python+selenium自动化测试-18Firefox下载自动保存文件及浏览器弹窗处理

不能像chrome一样点击导出文件便能自动下载,是Firefox的一个巨大的坑。虽然最新版本的Firefox修复长期以来不可选“以后自动采用相同的动作处理此类文件”的Bug,在当次浏览器启用可以自动下载此类文件,但在Firefox下一次启动后,[选项-应用程序]中并不能找到‘xls文件’这种内容类型,也找不到相应的配置文件(如mimeTypes.rdf),意味着不能自动下载指定类型的文件。
图01 第N次启动
图1
图02 第N次启动勾选上‘以后自动采用相同的动作处理此类文件’后,打开[选项-应用程序]查看到
在这里插入图片描述
图03 N+1次启动,打开[选项-应用程序]查看到
在这里插入图片描述
查了各种资料,可以通过about:config,修改一些高级配置来解决。代码如下:

	fp = webdriver.FirefoxProfile()
    fp.set_preference("browser.download.folderList", 2)# 0下载到桌面,1默认下载路径,2指定目录
    fp.set_preference("browser.download.dir", r'C:\Users\ComUserName\Desktop')
    fp.set_preference("browser.download.manager.showWhenStarting", False)# false不显示
    fp.set_preference("browser.download.forbid_open_with", True)#不打开保存的提示框
    fp.set_preference("browser.altClickSave", True)#快速保存
    # 不询问下载路径:后面的参数为要下载页面的content-type的值
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream,application/vnd.ms-excel,text/csv,application/zip")
    driver = webdriver.Firefox(firefox_profile=fp)

确实,在对导出文件没有监听的情况下,可以自动导出文件到指定路径。

不过,对导出文件有监听,就会无法自动保存到指定路径。我看了一下前台展示的效果,发现【保存文件】这个按钮加载出来有延迟。在网上找了,也没有好的解决方法。最终还是得人工手动点击一下【保存文件】按钮才能自动保存到指定的位置,虽然不影响后续自动化的执行,但是始终感觉不完美。

图A 有监听的文件导出
在这里插入图片描述
图B 自动化结果
在这里插入图片描述
可以用第三方库SendKeys(Python2)或者PyUserInput(Python3.0以上)解决。

from pykeyboard import PyKeyboard
m = PyKeyboard()
sleep(3)#应对【保存文件】按钮加载延迟
m.tap_key(m.tab_key)
m.tap_key(m.return_key)

PyUserInput安装参考
https://blog.csdn.net/zhusongziye/article/details/79586927
pymouse的使用
https://blog.csdn.net/alex1997222/article/details/80518397

发布了46 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_24601279/article/details/102794143