Selenium+Python浏览器下载弹窗的处理

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。可以很完美的解决下载弹窗的问题,其他浏览器可以先尝试前一种方法。

声明:本文的各种解决方案为参考其他网友的文章,本人只是做了整理和记录。



  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值