基于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实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
详解python进行mp3格式判断
Dec 23 Python
Python 实现随机数详解及实例代码
Apr 15 Python
使用Python自动化破解自定义字体混淆信息的方法实例
Feb 13 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
Python 一键获取百度网盘提取码的方法
Aug 01 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
Python异常模块traceback用法实例分析
Oct 22 Python
解决reload(sys)后print失效的问题
Apr 25 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
python实现单机五子棋
Aug 28 Python
Python 阶乘详解
Oct 05 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
PHP 中dirname(_file_)讲解
2007/03/18 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
php实现搜索类封装示例
2016/03/31 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
Table冻结表头示例代码
2013/08/20 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
Python文件处理
2016/02/29 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
体育专业个人求职信范文
2013/12/27 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
nginx之queue的具体使用
2022/06/28 Servers