python实现selenium文件上传的两种方式
方法一、input标签上传
如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径。
方法二、非input标签上传
这种上传方式需要借助第三方工具,主要有以下三种情况:
1.AutoIt 去调用它生成的au3或者exe格式的文件
2.SendKeys第三方库(目前只支持到2.7版本)
网址:SendKeys · PyPI
3.Python的pywin32库,通过识别对话框句柄来进行操作
pywin32库的安装因为文件较大,建议使用豆瓣源直接pip安装:
pip install -i https://pypi.douban.com/simple pywin32
前两种在这里不考虑,只采用第三种方法即可,使用之前可以借助工具winspy来辅助定位,winspy下载地址:WinSpy download | SourceForge.net
winspy工具的定位方法采用的是绝对路径定位,即根路径为点击上传按钮后的弹出框的整个窗口页面,一般根据Text文本值和Class属性来定位,如图所示:
根路径如图所示,它的Text文本值为“打开”,Class属性值为“#32770”。
在winspy工具左上角有个聚焦按钮,通过拖动的方式拖动到上传弹出框的对应位置(如文件路径输入框)后松开,winspy界面会显示当前定位的Text文本值(此处为空)和Class属性值(Edit),在windows的窗口下,Parent属性的值中,括号里面的就表示它上一层元素的Class属性值,可以通过点击Parent属性值跳到上一层元素,最终我们定位到文件路径输入框的Class属性路径为:Edit - combox - comboBoxEx32 - #32770。
那么同理,“打开”按钮通过同样的绝对路径方式定位,得到它的Class属性路径为:button - #32770。
通过借助winspy工具定位出了对应元素的路径,就可以通过pywin32库来实现上传操作啦!
pywin32的实现步骤为:
1、找到绝对路径输入框和“打开”按钮的元素;
2、输入绝对路径,点击打开
在页面实现的前提条件为 :windows上传窗口已经出现,可以sleep1~2秒等待上传的弹框出现。
import win32gui import win32condef upload(filePath, browser_type="chrome"):'''通过pywin32模块实现文件上传的操作:param filePath: 文件的绝对路径:param browser_type: 浏览器类型(默认值为chrome):return:'''if browser_type.lower() == "chrome":title = "打开"elif browser_type.lower() == "firefox":title = "文件上传"elif browser_type.lower() == "ie":title = "选择要加载的文件"else:title = "" # 这里根据其它不同浏览器类型来修改# 找元素# 一级窗口"#32770","打开"dialog = win32gui.FindWindow("#32770", title)# 向下传递ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None) # 二级comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None) # 三级# 编辑按钮edit = win32gui.FindWindowEx(comboBox, 0, 'Edit', None) # 四级# 打开按钮button = win32gui.FindWindowEx(dialog, 0, 'Button', "打开(&O)") # 二级# 输入文件的绝对路径,点击“打开”按钮win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filePath) # 发送文件路径win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 点击打开按钮
python实现selenium文件上传的两种方式相关推荐
- 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式
大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...
- JavaBean实现多个文件上传的两种方法
JavaBean实现多个文件上传的两种方法 王新芳 刘杰 北京工商大学计算机学院 摘要:本文介绍了JavaBean实现多个文件上传的两种方法,分别是使用http协议和ftp协议实现.首先 ...
- 文件上传的三种方式-Java
前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...
- Android 文件上传的几种方式
这两天和新来的同事做一个项目,用到了文件上传,在这里记录下历程 Android文件上传有各种各样的Http框架,我也就简单说说我常用的吧,LiteHttp,OkHttp的封装还没做完全,有时间会补上, ...
- 图片上传的两种方式(前端和后端)
1:前端 HTML: <html> <script type="text/javascript" src="js/jquery-3.1.1.min.js ...
- HTML5 文件上传的2种方式
原文地址:http://blog.csdn.net/lovelyelfpop/article/details/71421123 以前上传文件需要提交Form表单. HTML5方式上传文件,可以通过使用 ...
- Android图片上传的两种方式
图片上传,以及带参数的图片上传是Android开发中,很常见的需求.但也是接口联调难度相对比较大的技术实现,本文介绍两种可靠的图片上传方式.一是通过 MultipartBody 来实现:二是通过图片转 ...
- python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法
脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个 ...
- Python页面自动化文件上传两种方式
Python页面自动化测试之文件上传的两种方式 --广州_vivi 最近教学过程,学员项目出现测试上传文件无法执行的情况,分析发现学员项目的上传按钮并不是input按钮,导致无法使用直接定位元素方式进 ...
最新文章
- goland 交叉生成linux文件
- 由铁路订票系统联想到的
- IOS开发学习记录第3天之C语言学习
- 天气预报中的风向到底有啥用?
- [Bzoj4260]Codechef REBXOR(trie树)
- navicat 结构同步会加锁吗_被柜员怠慢的张小波,真的会永久地转走几个亿的结构性存款吗?...
- ES6(一)——字面量的增强、解构、let/const、块级作用域、暂时性死区
- 点钞机语音怎么打开_原来微信语音一样能转发? 居然还有人不知道
- python机器学习案例系列教程——层次聚类(文档聚类)
- python在哪个方向岗位最多_Python就业方向这么多,哪些岗位最有发展?
- jdk1.6-64下载
- ios游戏开发 Sprite Kit教程:初学者 3
- 启动计算机实现5秒开机,win10提高开机速度的设置教程 电脑五秒开机优化步骤...
- 数字图像来源:光学成像系统
- ppt编辑数据链接文件不可用_ppt插入图表数据不能编辑怎么办
- 电力行业数据安全解决方案
- 灵遁者:关于时间的度量和方向的说明
- COSCon'20 Apache Roadshow- China 精彩收官!|会场精彩回顾篇
- Excel中所有图片大小调整方法并将插入图片在单元格居中代码
- Linux下如何聊天-irc,MSN,ICQ,QQ你会用了吗?
热门文章
- 使用timeit测试python语句执行的时间
- 解决Git执行pull命令时,报错:Please enter a commit message to explain why this merge is necessary...
- 2021年高考成绩查询梧州市,2021年梧州高中学校排名一览表,梧州比较好的高中学校排名...
- 微星b450迫机炮主板,省电
- 看金融海啸是如何害死蚯蚓一家的(多图杀猫)
- 美对华光伏双反复审终裁出炉 贸易变数让厂商第三地外移计划却步
- 团队管理中提高团队凝聚力方法
- 初识Django框架
- 视频伪原创批量处理工具 md5视频 修改器
- 华为H3C交换机+Radius+mysql Radius认证认证方案,嵌入式客户端代码,配置(上:认证方案)