WebDriver允许我们设置默认的文件下载路径,也就是说,文件会自动下载并且存放到设置的目录中,下面以FireFox浏览器为例,执行文件的下载。
案例1
from selenium import webdriver from time import sleep import os fp = webdriver.FirefoxProfile() fp.set_preference("browser.download.folderList", 2) fp.set_preference("browser.download.manager.showWhenStarting", False) fp.set_preference("browser.download.dir", os.getcwd()) fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octer-stream") #下载文件的类型 driver = webdriver.Firefox(firefox_profile=fp) driver.implicitly_wait(10) driver.maximize_window() driver.get('https://pypi.org/project/selenium/') driver.find_element_by_id('files-tab').click() driver.find_element_by_xpath("/html/body/main/div[3]/div/div/div[2]/div[4]/table/tbody/tr[2]/th/a").click() sleep(3) driver.quit()
---------------------------------------------------------------------------------------------------------------------------------------------------------------
为了让Firefox浏览器能实现文件下载,我们需要通过FirefoxProfile()对其做一些设置。
browser.download.folderList
设置成0代表下载到浏览器默认下载路径,设置成2则可以保存到指定目录。
browser.download.manager.showWhenStarting
是否显示开始,True为显示,Flase为不显示
browser.download.dir
用于指定所下载文件的目录。 os.getcwd()函数不需要传递参数,用于返回当前的目录。
browser.helperApps.neverAsk.saveToDisk
指定要下载页面的Content-type值,"application/octer-stream"为文件的类型。
HTTP Content-type常用对照表:http://tool.oschina.net/commons
这些参数的设置可以通过在Firefox浏览器地址栏输入:about:config进行设置。
将所有设置信息在调用WebDriver的Firefox()方法时作为参数传递给浏览器。Firefox浏览器在下载时就根据这些设置信息将文件下载的当前脚本的目录下。
上面的例子中设置只针对Firefox浏览器,不同的浏览器设置方法会有所不同。通过的方法还是借助AutoIt来操作Windows控件进行下载。
案例2
# -*- coding: utf-8 -*- from selenium import webdriver from time import sleep fp = webdriver.FirefoxProfile() fp.set_preference("browser.download.folderList", 2) fp.set_preference("browser.download.manager.showWhenStarting", False) fp.set_preference("browser.download.dir", "c:\\test") fp.set_preference("plugin.disable_full_page_plugin_for_types", "application/pdf") fp.set_preference("pdfjs.disabled", True) fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf") driver = webdriver.Firefox(firefox_profile=fp) driver.implicitly_wait(10) driver.maximize_window() driver.get('http://sahitest.com/demo/saveAs.htm') driver.find_element_by_xpath('/html/body/a[2]').click() sleep(3) driver.quit()