基于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服务器与android客户端socket通信实例
Nov 12 Python
浅谈python中的正则表达式(re模块)
Oct 17 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
tornado 多进程模式解析
Jan 15 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
学习Python需要哪些工具
Sep 04 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
destoon之一键登录设置
2014/06/21 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
jquery中attr和prop的区别分析
2015/03/16 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
解决Python使用列表副本的问题
2019/12/19 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
新闻传媒系求职信范文
2014/04/19 职场文书
中学生操行评语
2014/04/24 职场文书
企业职业病防治方案
2014/05/29 职场文书
毕业生见习报告总结
2014/11/08 职场文书
门面房租房协议书
2014/12/01 职场文书
房产公证书格式
2015/01/26 职场文书
病危通知书样本
2015/04/17 职场文书
投标售后服务承诺书
2015/04/29 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL