引自 https://blog.csdn.net/Momorrine/article/details/79794146html
1. 环境python
操做系统web |
Win10chrome |
IDE浏览器 |
Eclipse (Oxygen 4.7)+ PyDev 5.9.2 (JDK1.8)网络 |
Pythonapp |
3.5工具 |
Selenium学习 |
selenium-3.9.0-py2.py3-none-any.whl测试 |
FirefoxDriver |
0.20.0 |
Firefox浏览器 |
59.0.2(32位) |
ChromeDriver |
2.34 |
Chrome浏览器 |
63.0.3239.84 |
2. Firefox
这是虫师书里面的一个例子,我直接copy下来了
可是很不幸,我这儿运行了,仍是会弹出确认下载对话框,虽然设置了browser.download.manager.showWhenStarting为Flase,而因为Selenium没法操做该对话框,程序就卡在那儿了没能下载文件。
我发现确认下载对话框,默认的焦点就在【肯定】上,就试着在代码的最后添加这样一句:
ActionChains(driver).key_down(Keys.ENTER).perform()
当这个对话框出现的时候,手动键入ENTER是能够下载的,但这句代码并无起做用,仍然没有下载文件。
3. Chrome
又试着增长了一些等待时间,始终没成功,就想着先换一个浏览器试试吧。
对Chrome浏览器设置了profile.default_content_settings.popups为0是起做用的,运行这段代码,并无弹出确认提示框,文件能够下载下来。
4. Firefox+Pywin32
总以为Firefox应该也会有办法来操做那个确认下载对话框,百度了一下,有提到Pywin32,能够获取并操做Windows窗口。那就先安装一个吧。
Pywin32,我是直接在命令行切换到Python根目录\Scripts下,用pip install pywn32来安装的:
此外还用到一个能够获取Windows窗口属性的小工具Sky++,下载了解压缩就能够用了。运行Sky++后,点击【搜索】-【窗口搜索】菜单项打开【窗口搜索】对话框
按住其中的查找程序工具拖动到确认下载对话框后释放,【窗口搜索】对话框中会显示该窗口的句柄、标题、类等属性
经过后两个属性,就能够调用win32gui.FindWindow()获取该窗口的句柄,进而试着操做该窗口。注意 :虽然在Sky++中已经获得了句柄,但程序中不能直接用,由于每次运行窗口句柄是不一样的。
因而我在以前的代码后面增长了下面这句代码
dialog = win32gui.FindWindow("MozillaDialogClass", u"正在打开 selenium-3.11.0-py2.py3-none-any.whl")
打印了一下dialog,是有值的,就说明成功地获取到了窗口句柄了。
在获取到对话框的句柄后,就应该进一步获取【肯定】按钮的句柄,而后点击该按钮,这样就应该能够下载文件了
但是一直没成功,打印button一直是0,没有能获取到按钮的句柄,我怀疑是由于类名不正确的缘由,但Sky++上没法看到按钮的信息,将类名换了又换,或许是"MozillaButtonClass",但始终没有获取。
转而我又想,既然对话框获取到了,那对对话框键入ENTER呢,或许就能够了
win32gui.SendMessage(dialog,win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
嗯,真的能够了。所以用Firefox下载文件的完整代码是
只是有一个问题,在import win32gui和win32con时,会有错误标识
但运行没问题,不知道为何。。。。。。
还要注意的是,须要根据当前网络的情况,以及下载文件的大小,适当添加一些等待时间,否则会可能出现最后关闭浏览器驱动时文件还没下完的状况。
5. 再次Firefox
以上那些是昨天写的,是到昨天晚上为止的认识。今儿早上来了,在搜另一个问题的时候,发现有博文说Firefox不能下载的缘由,极可能是由于"browser.helperApps.neverAsk.saveToDisk"设置的文件类型不对的缘故,我把那个例子里面的类型"binary/octet-stream"贴过来试了一下,果真是能够的。但关于browser.download.manager.showWhenStarting设置为Flase不弹出提示框,其实代码中把文件类型设置正确了,没有设置browser.download.manager.showWhenStarting,也并无弹出提示框。
有朋友友情提示,该加个参考资料小节。之前写东西的时候却是每次都有注意引用这个问题,而最近写的也只是记录本身的一个学习Selenium+Python Web自动化测试的过程。不过好习惯仍是该保持,这篇已经不太记得本身到底搜了哪些文章了,就记下几篇还记得的吧。
6. 参考资料
[1] 《Selenium2自动化测试实战:基于Python语言》虫师编著 电子工业出版社 2016年1月
[2] 用selenium的webdriver下载文件(基于python,firefox和chrome) https://blog.csdn.net/cyjs1988/article/details/74988997
[3] Selenium 设置浏览器下载 http://www.cnblogs.com/fnng/p/7700620.html