基于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 相关文章推荐
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
python opencv之SIFT算法示例
Feb 24 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
Dec 14 Python
提升Python程序性能的7个习惯
Apr 14 Python
Python编写打字训练小程序
Sep 26 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
Jan 20 Python
如何在sublime编辑器中安装python
May 20 Python
如何理解python面向对象编程
Jun 01 Python
python如何输出反斜杠
Jun 18 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
浅析php工厂模式
2014/11/25 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
node网页分段渲染详解
2016/09/05 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
详解jquery和vue对比
2019/04/16 jQuery
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
主题酒店策划书
2014/01/28 职场文书
活动总结的格式
2014/05/07 职场文书
施工安全责任书范本
2014/07/24 职场文书
社区活动策划方案
2014/08/21 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
勇敢的心观后感
2015/06/09 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
SpringBoot整合Minio文件存储
2022/04/03 Java/Android