基于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计算方程式根的方法
May 07 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
Python中异常重试的解决方案详解
May 05 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
Linux CentOS7下安装python3 的方法
Jan 21 Python
pandas series序列转化为星期几的实例
Apr 11 Python
python在每个字符后添加空格的实例
May 07 Python
基于Python的ModbusTCP客户端实现详解
Jul 13 Python
解决Django中多条件查询的问题
Jul 18 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Python中的流程控制详解
Feb 18 Python
Python数据分析入门之教你怎么搭建环境
May 13 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开发入门教程之面向对象
2006/12/05 PHP
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
php查询内存信息操作示例
2019/05/09 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
python2.7实现邮件发送功能
2018/12/12 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
大四本科生的自我评价
2013/12/30 职场文书
社团活动总结报告
2014/06/27 职场文书
Python打包为exe详细教程
2021/05/18 Python
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android