很多人不会处理弹出的文件下载框,其实跟上传类似,可以用autoit和win32api解决,方法类似,我们不在举例了,可以根据上面所讲的上传来改写。 这里想讲讲一种更漂亮的处理办法,那就是指定下载路径,不弹出弹框,直接下载到指定路径。

Firefox 文件下载

对于Firefox,需要我们设置其Profile:

browser.download.dir:指定下载路径

browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径

browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器

browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问

#author:命命
from selenium import webdriver
from time import sleep 
profile = webdriver.FirefoxProfile() 
profile.set_preference('browser.download.dir', 'C:\\Users\\Administrator\\Desktop') 
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) 

Firefox需要针对每种文件类型进行设置,这里需要我们查询对应文件的MIME类型,可以用以下链接进行查询:MIME 参考手册

Chrome 文件下载

Chrome浏览器类似,设置其options:

download.default_directory:设置下载路径

profile.default_content_settings.popups:设置为 0 禁止弹出窗口

它的设置就简单多了,看个示例:

#author:命命
from selenium import webdriver
from time import sleep 
options = webdriver.ChromeOptions() 
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 
    'C:\\Users\\Administrator\\Desktop'} 
options.add_experimental_option('prefs', prefs) 
driver = webdriver.Chrome(executable_path='D:\\test_software\python\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()

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:http://zhangyanc.club/subject/article/selenium-download/

许可协议:署名-非商业性使用 4.0 国际许可协议