《selenium2 python 自动化测试实战》(14)——下载文件
说下载文件之前,我再和大家说一下用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)——下载文件的更多相关文章
- selenium2 python自动化测试实战(回归测试)
selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...
- 船长带你看书——《selenium2 python 自动化测试实战》(1)
有很多selenium的教程,你没有从头看,当你看的时候已经很难跟上作者的节奏了.现在,你有机会再从头学一次了.从今天开始,船长会从最基本的知识开始,和大家一起学selenium.能不能跟着一起就看大 ...
- 《selenium2 python 自动化测试实战》(13)——上传文件
看代码: # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefo ...
- Selenium2+Python自动化测试实战
本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用.后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的 ...
- 《selenium2 python 自动化测试实战》(4)——鼠标事件
鼠标事件包含在ActionChains类中,导入时只需要: from selenium.webdriver.common.action_chains import ActionChains 导入类即可 ...
- 《selenium2 python 自动化测试实战》(21)——unittest单元测试框架解析
unittest是展开自动化测试的基础——这个框架很重要! 我们先自己写一个测试类: 1.被测试类 Widthget.py: # coding: utf-8 class Widthget: de ...
- 《selenium2 python 自动化测试实战》(20)——Selenium工具介绍
(一)Selenium IDE Firefox的一个插件,有助于我们理解测试框架.在附加组件里搜索下载,一般搜的结果里前几个都不是,得点那个查看更多才行,找到这个: 安装以后浏览器工具栏会有: 安装好 ...
- 《selenium2 python 自动化测试实战》(17)——几个cookies操作
之前我们已经学过利用cookies跳过验证码登录了,那时候我们用的方法是add_cookie()方法,这里再给大家介绍两个,一般情况下我们用不到,了解一下就可以,而且如果真的用到的时候百度也很快的: ...
- 《selenium2 python 自动化测试实战》(11)——selenium安装版本
先和大家说一下selenium环境的问题,大家可以在cmd里先看一下自己的selenium版本: 回车,就可以安装了. 本来想和大家说如何跳过验证码进行登录的,结果好多朋友加我问我环境配置的问题,所以 ...
随机推荐
- SQL生成两个时间之间的所有日期
select dateadd(dd,number,'2012-1-1') AS date from master..spt_values where type='p' and dateadd(dd,n ...
- php上传文件出现500错误
问题: 能上传小于10k的文件,上传大于10k的文件就会报500错误 解决办法: 首先查看错误日志,看看报错是什么 其次查看client_body_temp的权限问题 关于client_body_te ...
- IOS-项目中常见文件介绍
一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要用来放依赖的框架 3.test文件夹是 ...
- JS中将对象转化为数组
前言 其实这本来应该是一个很基础的问题了,但我之做一想记录一下是因为之前因为对象转数组的时候卡住了后来弄了出来,但最近再遇到这个问题时竟然又卡主了,所以,关于这个问题,如何把一个对象{'未完成':5, ...
- 【hive】解析url格式字符串
解析url格式字符串 parse_url() parse_url(url_str,’xxx’):第一个参数是url格式字符串,第二个参数为要解析出来的属性 parse_url(‘http://face ...
- 使用Eclipse EE(汉化版) 创建一个JavaWeb工程
第一步:打开eclipse ee,单击“文件”-->单击“新建”-->单击“动态Web项目”. 若没找到“动态Web项目”,单击“其他” -->在弹出的窗口中打开“Web”下拉菜单 ...
- mysql服务1067错误:修改mysql可执行文件路径
今天遇到mysql服务1067错误的问题,设置使用系统账户也无法启动mysql,后面认证看了系统的配置信息,发现启动文件也就是mysql安装路径是之前的(也说明之前安装mysql,没去卸载直接安装新的 ...
- 20165202 预备作业3 Linux安装及学习
一.虚拟机安装 娄老师的<基于VirtualBox安装Ubuntu图文教程>对于安装过程的介绍很易懂,但在安装过程中还是遇到了一些问题 Q1:安装教程中下载地址的VM提示安装包损坏 解决办 ...
- dubbo 之filter使用
1.继承接口com.alibaba.dubbo.rpc.Filter实现public Result invoke(Invoker<?> invoker, Invocation invoca ...
- js 预处理 与 执行 的顺序
链接 浏览器渲染 js先编译, 后执行, 而且先在第一块代码段编译执行, 再到第二个代码段, 代码段之间是可以共享变量的 DOMContentLoaded