webdriver高级应用 -无人工干预地自动下载某个文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/2/13 18:59 # @Author : solo # @Site : # @File : webdriver_11_6.py # @Software: PyCharm #无人工干预地自动下载某个文件 #目的:在网页上下载时,通常需要人为设定下载文件并选择保存路径,这样就无法实现完全自动下载的工程。以下示例是基于firefox浏览器的 #全自动化文件下载操作,脚本执行后会将文件保存到指定目录的文件夹下。 from selenium import webdriver import unittest,time class TestDemo(unittest.TestCase): def setUp(self): #创建一个firefoxprofile示例,用于存放自定义配置 profile = webdriver.FirefoxProfile() #指定下载路径,默认只会自动创建一级目录,如果指定了 #多级不存在的目录,将会下载到默认路径 profile.set_preference('browser.download.dir','d:\\iDownload') #将browser.download.folderList设置为2,表示将文件下载到指定路径 #设置成2表示使用自定义下载路径; #设置成0表示下载到桌面,设置成1表示下载到默认路径 profile.set_preference('browser.download.folderList',2) #'browser.helperApps.alwaysAsk.force对于未知的MIME类型文件会弹出窗口 #让用户处理,默认值为True,设定为False表示不会记录打开未知MIME类型文件的方法 profile.set_preference('browser.helperApps.alwaysAsk.force',False) #在开始下载时是否显示下载管理器 profile.set_preference("browser.download.manage.showWhenStaring",False) #设定为False会把下载框进行隐藏 profile.set_preference("browser.download.manager.useWindow",False) #默认值为True,设定为False表示不获取焦点 profile.set_preference("browser.download.manager.alertonEXEopen",False) # # # profile.set_preference("browser.helperApps.neverAsk.openfile", "application/pdf") profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/zip,application/octet-stream") profile.set_preference("browser.download.manager.showAlertonComplete",False) profile.set_preference("browser.download.manager.closeWhenDone",False) self.driver = webdriver.Firefox(executable_path="C:\\webdriver_firefox_driver", firefox_profile=profile) def test_dataPicker(self): #访问webdriver的驱动firefox的驱动文件下载网址 urll = "https://github.com/mozilla/geckodriver/releases" self.driver.get(urll) self.driver.find_element_by_xpath\ ('//strong[.="geckodriver -v0.11.1 - win64.zip"]').click() #等待文件加载 time.sleep(10) url = "https://www.python.org/downloads/release/python - 2712/" self.driver.get(url) self.driver.find_element_by_link_text\ ("Windows x86 -64 MSI installer").click() time.sleep(100) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()