Selenium+Python浏览器下载弹窗的处理
在使用selenium实现自动化下载的时候,遇到一个比较头疼的问题,就是浏览器下载弹窗的处理。由于这个弹窗是浏览器系统自己弹出的,所以用selenium定位弹窗并操作的方法并不可行,在网上找了很多资料,终于解决了,记录一下解决问题的过程吧。常见的处理方法如下:
【指定下载路径,不弹出弹框,直接下载到指定路径】
Firefox文件下载
对于Firefox,需要我们设置其Profile:
browser.download.dir
:指定下载路径browser.download.folderList
:设置成2
表示使用自定义下载路径;设置成0
表示下载到桌面;设置成1
表示下载到默认路径browser.download.manager.showWhenStarting
:在开始下载时是否显示下载管理器browser.helperApps.neverAsk.saveToDisk
:对所给出文件类型不再弹出框进行询问
from selenium importwebdriver
from time importsleep
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir','d:\\')
profile.set_preference('browser.download.folderList',2)
profile.set_preference('browser.download.manager.showWhenStarting',False)
profile.set_preference('browser.helperApps.neverAsk.saveToDisk','application/zip')
driver =webdriver.Firefox(firefox_profile=profile)
driver.get('http://sahitest.com/demo/saveAs.htm')
driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
sleep(3)
driver.quit()
Firefox需要针对每种文件类型进行设置
Chrome 文件下载
Chrome浏览器类似,设置其options:
- download.default_directory:设置下载路径
- profile.default_content_settings.popups:设置为 0 禁止弹出窗口
---实例----
# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\'}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(executable_path='D:\\chromedriver.exe', chrome_options=options)
driver.get('http://sahitest.com/demo/saveAs.htm')
driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
sleep(3)
driver.quit()
但是,发现在selenium+firefox的配置下并不能生效!于是就在网上继续找,找到了下面这种方法
【新建火狐浏览器的profile,设置测试场景的配置,默认自动保存,直接跳过下载窗口】
步骤:
1、火狐下创建一个新的profile,创建过程参考创建独立的Firefox profile
2、启动新建的profile浏览器,让浏览器学习下载的操作(把下载操作的步骤操作一遍,让浏览器的应用程序中出现该类型操作的选择项)
3、设置脚本,脚本设置如下:
fp=webdriver.FirefoxProfile("新建profile的访问路径") #注意是profile路径,不是bat文件的路径,一般位于火狐浏览器的数据目录下
browser = webdriver.Firefox(fp) #启动浏览器,加载profile</strong></span></span>
这样就会自动加载新的profile来运行脚本.此类方法在火狐上面验证OK。可以很完美的解决下载弹窗的问题,其他浏览器可以先尝试前一种方法。
声明:本文的各种解决方案为参考其他网友的文章,本人只是做了整理和记录。