基于python的selenium两种文件上传操作实现详解


Posted in Python onSeptember 19, 2019

方法一、input标签上传

如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径,这里不做过多赘述,前文有相关操作方法。

方法二、非input标签上传

这种上传方式需要借助第三方工具,主要有以下三种情况:

1.AutoIt 去调用它生成的au3或者exe格式的文件

2.SendKeys第三方库(目前只支持到2.7版本)

网址:https://pypi.python.org/pypi/SendKeys/

3.Python的pywin32库,通过识别对话框句柄来进行操作

pywin32库的安装因为文件较大,建议使用豆瓣源直接pip安装:

pip install -i https://pypi.douban.com/simple pywin32

前两种在这里不考虑,只采用第三种方法即可,使用之前可以借助工具winspy来辅助定位,winspy下载地址:

https://sourceforge.net/projects/winspyex/

winspy工具的定位方法采用的是绝对路径定位,即根路径为点击上传按钮后的弹出框的整个窗口页面,一般根据Text文本值和Class属性来定位,如图所示:

基于python的selenium两种文件上传操作实现详解

根路径如图所示,它的Text文本值为“打开”,Class属性值为“#32770”。

基于python的selenium两种文件上传操作实现详解

在winspy工具左上角有个聚焦按钮,通过拖动的方式拖动到上传弹出框的对应位置(如文件路径输入框)后松开,winspy界面会显示当前定位的Text文本值(此处为空)和Class属性值(Edit),在windows的窗口下,Parent属性的值中,括号里面的就表示它上一层元素的Class属性值,可以通过点击Parent属性值跳到上一层元素,最终我们定位到文件路径输入框的Class属性路径为:Edit - combox - comboBoxEx32 - #32770。

基于python的selenium两种文件上传操作实现详解

基于python的selenium两种文件上传操作实现详解

那么同理,“打开”按钮通过同样的绝对路径方式定位,得到它的Class属性路径为:button - #32770。

基于python的selenium两种文件上传操作实现详解

通过借助winspy工具定位出了对应元素的路径,就可以通过pywin32库来实现上传操作啦!

pywin32的实现步骤为:

1、找到绝对路径输入框和“打开”按钮的元素;

2、输入绝对路径,点击打开

在页面实现的前提条件为 :windows上传窗口已经出现,可以sleep1~2秒等待上传的弹框出现。

import win32gui
import win32con
def upload(filePath, browser_type="chrome"):
 '''
 通过pywin32模块实现文件上传的操作
 :param filePath: 文件的绝对路径
 :param browser_type: 浏览器类型(默认值为chrome)
 :return:
 '''
 if browser_type == "chrome":
  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 相关文章推荐
使用Python从零开始撸一个区块链
Mar 14 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
对python生成业务报表的实例详解
Feb 03 Python
python使用sessions模拟登录淘宝的方式
Aug 16 Python
python3.6编写的单元测试示例
Aug 17 Python
Python代理IP爬虫的新手使用教程
Sep 05 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
python实现简单图书管理系统
Nov 22 Python
Python序列类型的打包和解包实例
Dec 21 Python
详解python破解zip文件密码的方法
Jan 13 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
Python分割训练集和测试集的方法示例
Sep 19 #Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 #Python
PHP统计代码行数的小代码
Sep 19 #Python
Python实现代码统计工具
Sep 19 #Python
python实现统计代码行数的小工具
Sep 19 #Python
python日志模块logbook使用方法
Sep 19 #Python
python统计指定目录内文件的代码行数
Sep 19 #Python
You might like
模板引擎正则表达式调试小技巧
2011/07/20 PHP
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
点图片上一页下一页翻页效果
2008/07/09 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
Python 连连看连接算法
2008/11/22 Python
Python实现的检测网站挂马程序
2014/11/30 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
详解python中的异常和文件读写
2021/01/03 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
高校教师思想汇报
2014/01/11 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
新学期开学标语2015
2015/07/16 职场文书
高中政治教师教学反思
2016/02/23 职场文书
Java 超详细讲解hashCode方法
2022/04/07 Java/Android