《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自动化肯定有一天会用到的,嘿嘿。
找有下载功能的网站,加上调试代码,这周工作又加班比较多,导致这么长时间才更新。代码都是我已经验证过可以成功运行的,这个大家可以放心。
如果大家要试一下的话建议自己去找别的网站,或者用自己公司的网站(如果也有下载的话),因为这个网站是要认证的,比较麻烦。我也找了好长时间
如果遇到问题留言就可以~~还有,谢谢@川的打赏~~
我想给自己吹一波——如果你想找技术比船长好的人那很容易,一找一大把,随便拉过来一个人技术可能就比我好,可是你要找大半夜十二点多还给你耐心解决问题的人,那就不容易了~~船长就是一个,嘿嘿……哈哈
大家周末愉快~~~
微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~