说下载文件之前,我再和大家说一下用cookie登录的事,既然我们用cookie登录,那么传过去的cookie肯定是要和对应的网站完全一致的,注意,是包括大小写哦,本来我也是不知道,我用这个方法登录自己公司的网站,fiddler抓包和代码如下:

# coding: utf-8

from selenium import webdriver
from time import sleep driver = webdriver.Firefox()
driver.get("https://www.yiyao.cc") driver.add_cookie({'name': '_ui_',
                 'value': 'oVTQORvHOLSJQIxA==',
                 'domain': '我公司的网站.cc'})
driver.add_cookie({'name': '_ut_',
                  'value': 'otrftkqcwJoQ4F2Q==',
                  'domain': '我公司的网站.cc'})
sleep(3)
driver.refresh()

这时候我怎么跑就是不能实现自动登录,我也很奇怪,后来注意到fiddler里的domain是大写的D,也就是Domain,于是我抱着试一下的态度去把代码里的domain字段改成了Domain,竟然成功了。。所以在这里也提醒一下大家,道理都是想通的,如果你发现自己登录不上去,那肯定有哪里写的不太准确,当然,前提是你们公司的网站在安全方面做得不是很完善,如果安全做得非常好的,登不上去就别问我了,我也不会

下载文件

下载文件的代码网上一找一大堆,但是要想找能写下载例子的网站就不容易找了……找到了还得调通了,真的很麻烦……先抱怨两句

先看代码:

# coding: utf-8

from selenium import webdriver
from time import sleep profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir', r'C:\Users\DELL\Desktop')
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
# 下载的文件格式是xlsx
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') driver = webdriver.Firefox(firefox_profile=profile)
driver.get("https://www.yiyao.cc") driver.add_cookie({'name': '_ui_',
                   'value': '1ItEQ8yIFCS+kOCim0jLfw==',
                   'Domain': 'yiyao.cc'})
driver.add_cookie({'name': '_ut_',
                   'value': '3Gl6h8mw0JvBy5LDCxtT+g==',
                   'Domain': 'yiyao.cc'})
sleep(3)
driver.refresh()
sleep(3)
# 去掉target="_blank"属性
js = 'document.getElementsByClassName("orange")[0].target="";'
driver.execute_script(js)
# 点击卖家中心
driver.find_element_by_xpath(".//*[@id='userType']/a[2]").click()
sleep(1)
# 点击商品管理
driver.find_element_by_xpath(".//*[@id='firstpane']/h3[2]").click()
sleep(2)
# 点击商品发布
driver.find_element_by_xpath(".//*[@id='firstpane']/div[2]/a[2]").click()
# 点击批量发布
driver.find_element_by_xpath(".//*[@id='title-tabs']/span[2]").click()
sleep(2)
# 点击“否”
driver.find_element_by_xpath(".//*[@id='down_no_code_template']").click()
# 接下来进入下载流程

以上代码就是登录网站,点击按钮后进行下载的全部流程了。我们来解释一下:

上面的一大堆set_preference其实就是Firefox浏览器的设置,那么我们可以在火狐浏览器里找到这些名字:

在火狐浏览器地址栏输入:about:support,然后下拉,找到:

看,set_preference的那些key值就是取的这里面的值,也就是set_preference的操作就是修改这些配置的值。我把百度来的给大家贴下来,下面就是常用的这些key的意思,都是与下载有关的选项:

  • browser.download.dir

相同类型的文件上一次的下载保存位置。

  • browser.download.folderList

设置Firefox的默认下载文件夹。0是桌面;1是“我的下载”;2是自定义。这一选项你可以直接在“首选项-下载-将所有文件保存在此文件夹”中修改。但请注意,如果你在“首选项-下载-保存每个文件夹前询问存储位置“(也就是要求弹出下载对话框),那么本选项无效。

  • browser.download.manager.showWhenStarting

当下载开始时是否显示下载对话框,Ture是显示。这一项同样可以在“首选项-下载”中更改

给大家一个网站,这里面有大部分的解释,愿意看的可以看看:

https://www.cnblogs.com/shpchan/archive/2010/01/14/1647596.html

profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

这句的意思是设置保存的格式,注意,格式必须与你下载的文件相同,这个值(就是传的第二个参数)就是保存文件的MIME类型,常用的有:

  • docx

application/vnd.openxmlformatsofficedocument.wordprocessingml.document

  • xlsx

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

  • xls

application/vnd.ms-excel

  • doc

application/msword

  • pdf

application/pdf

 

文件一般就这几种吧,大家在下载对应文件的时候只要将上面代码第二个参数换成对应的文件类型的就可以直接跳过弹出框自动下载了。给大家一个网址,需要的时候可以去这个网址查一下对应文件的MIME类型:

https://www.cnblogs.com/ingstyle/p/5711410.html

以上代码船长运行过了,没有问题的~~

至于修改属性js语句很快就会和大家讲。其实百度一大堆

刚才给大家那两个网址建议大家保存一下,如果不保存,那就一直关注我的公众号吧,只要你写selenium自动化肯定有一天会用到的,嘿嘿。

找有下载功能的网站,加上调试代码,这周工作又加班比较多,导致这么长时间才更新。代码都是我已经验证过可以成功运行的,这个大家可以放心。

如果大家要试一下的话建议自己去找别的网站,或者用自己公司的网站(如果也有下载的话),因为这个网站是要认证的,比较麻烦。我也找了好长时间

如果遇到问题留言就可以~~还有,谢谢@川的打赏~~

我想给自己吹一波——如果你想找技术比船长好的人那很容易,一找一大把,随便拉过来一个人技术可能就比我好,可是你要找大半夜十二点多还给你耐心解决问题的人,那就不容易了~~船长就是一个,嘿嘿……哈哈

大家周末愉快~~~

微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

《selenium2 python 自动化测试实战》(14)——下载文件的更多相关文章

  1. selenium2 python自动化测试实战(回归测试)

    selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...

  2. 船长带你看书——《selenium2 python 自动化测试实战》(1)

    有很多selenium的教程,你没有从头看,当你看的时候已经很难跟上作者的节奏了.现在,你有机会再从头学一次了.从今天开始,船长会从最基本的知识开始,和大家一起学selenium.能不能跟着一起就看大 ...

  3. 《selenium2 python 自动化测试实战》(13)——上传文件

    看代码: # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefo ...

  4. Selenium2+Python自动化测试实战

    本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用.后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的 ...

  5. 《selenium2 python 自动化测试实战》(4)——鼠标事件

    鼠标事件包含在ActionChains类中,导入时只需要: from selenium.webdriver.common.action_chains import ActionChains 导入类即可 ...

  6. 《selenium2 python 自动化测试实战》(21)——unittest单元测试框架解析

    unittest是展开自动化测试的基础——这个框架很重要! 我们先自己写一个测试类: 1.被测试类 Widthget.py: # coding: utf-8 class Widthget:    de ...

  7. 《selenium2 python 自动化测试实战》(20)——Selenium工具介绍

    (一)Selenium IDE Firefox的一个插件,有助于我们理解测试框架.在附加组件里搜索下载,一般搜的结果里前几个都不是,得点那个查看更多才行,找到这个: 安装以后浏览器工具栏会有: 安装好 ...

  8. 《selenium2 python 自动化测试实战》(17)——几个cookies操作

    之前我们已经学过利用cookies跳过验证码登录了,那时候我们用的方法是add_cookie()方法,这里再给大家介绍两个,一般情况下我们用不到,了解一下就可以,而且如果真的用到的时候百度也很快的: ...

  9. 《selenium2 python 自动化测试实战》(11)——selenium安装版本

    先和大家说一下selenium环境的问题,大家可以在cmd里先看一下自己的selenium版本: 回车,就可以安装了. 本来想和大家说如何跳过验证码进行登录的,结果好多朋友加我问我环境配置的问题,所以 ...

随机推荐

  1. 转载:Chrome 控制台不完全指南

    Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效: 更高「逼格」更快「开发调试」更强「进阶级的Frontender」 Bug无处遁形「 ...

  2. Codeforces Round #400

    最近好像总是有点不想打,专题也刷不动,还是坚持这做了一场,虽然打到一半就没打了...(反正通常都只能做出两题) 感觉自己切水题越来越熟练了,然而难题还是不会做.. A题,水,用vector存下来就行了 ...

  3. java 不可不知的数据库知识-----事物

    每一个java开发对数据库都不会陌生,提到数据库,那么就一定要了解的一个知识点------事物,下面就对事物简单记录一下相关知识点. 最初接触事物的时候其实是从JDBC事物开始的,JDBC比较基础,这 ...

  4. ZOJ 2599 Graduated Lexicographical Ordering ★(数位DP)

    题意 定义两个数的比较方法,各位数字之和大的数大,如果数字和相等则按字典序比较两个数的大小.输入n,k,求:1.数字k的排名:2.排名为k的数. 思路 算是一类经典的统计问题的拓展吧~ 先来看第一问. ...

  5. Dubbo + Zookeeper 简单配置

    Dubbo + Zookeeper Zookeeper 下载及配置 下载到本机/usr/local目录 wget https://mirrors.tuna.tsinghua.edu.cn/apache ...

  6. js从数组中随机获取n个不重复的数据

    做云课堂的作业时遇到一要求,实现刷新页面时显示不同数据,(数组中20个据,页面加载10个).思路就是从0-19中随机生成10个不同的数,让数组取下标输出数据. 下面是在num的范围内生成n个不重复的数 ...

  7. Java复习5.面向对象

    Java 复习5面向对象知识 20131004 前言: 前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更 ...

  8. 虚拟机下的centos断电(非正常关机)后mysql启动不了

    在windows2003安装了vbox来部署centos. 但无法完美设置开机启动虚拟机里的系统. 只能把启动脚本放到用户的启动项里. server.bat "C:\Program File ...

  9. 转载-lvs官方文档-LVS集群中的IP负载均衡技术

    章文嵩(wensong@linux-vs.org) 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT.VS/TUN ...

  10. 海康威视 嵌入到web页面相关问题

    因项目上面需求,接触到了海康威视的设备,要把他嵌入到web页面中,所以就开始了爬坑之路 刚开始不知道如何把设备的页面嵌入到项目的web页面中,直到我遇见了他——“WEB3.0控件开发包V1.0.9_C ...