下载文件

webdriver 允许我们设置默认的文件下载路径。也就是说文件会自动下载并且存在设置的那个目录中。
要想下载文件,首选要先确定你所要下载的文件的类型。要识别自动文件的下载类型可以使用curl ,
如下图所示:

                                                              图3.16

curl 是利用URL 语法在命令行方式下工作的开源文件传输工具。


Content-Type ,内容类型,一般是指网页中存在的Content-Type ,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。


另一种方法是使用requests 模块来查找内容类型。Requests 是一个Python 的HTTP 客户端库,默认下载的python 环境包不包含这个类库,需要另外安装。使用方法如下:

import requests
print requests.head(’http://www.python.org’).headers[’content-type’]

 

一旦确定了内容的类型,就可以用它来设置Firefox 的默认配置文件,具体实例如下:

#coding=utf-8
import os
from selenium import webdriver


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/octet-stream")


browser = webdriver.Firefox(firefox_profile=fp)
browser.get("http://pypi.python.org/pypi/selenium")
browser.find_element_by_partial_link_text("selenium-2").click()


browser.download.dir    用于指定你所下载文件的目录。
os.getcwd()              该函数不需要传递参数,用于返回当前的目录。
application/octet-stream      为内容的类型。

 

知识扩展请参考以下博客地址:

http://blog.csdn.net/huilan_same/article/details/52789954?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

 

 

目录(?)   [+]

今天谈谈文件下载吧,很多人不会处理弹出的文件下载框,其实跟上传类似,可以用autoit和win32api解决,方法类似,可以看博主之前的文章 Python selenium —— 文件上传所有方法整理总结 ,今天这里博主主要想讲讲更漂亮的一种处理办法,那就是指定下载路径,不弹出弹框,直接下载到指定路径。

今天主要分享Firefox和Chrome的设置方法。

Firefox 文件下载

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

  • browser.download.dir:指定下载路径
  • browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成1 表示下载到默认路径
  • browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器
  • browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问

下面来个示例:

# -*- coding: utf-8 -*-

from selenium import webdriver

from time import sleep

 

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()

 

 

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()

posted on 2017-01-03 16:47  chenzx0918  阅读(554)  评论(0编辑  收藏  举报

导航