基于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 11 Python
在python的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
搞笑的程序猿:看看你是哪种Python程序员
Jun 12 Python
Python验证码识别处理实例
Dec 28 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
Python类的动态修改的实例方法
Mar 24 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
TensorFlow损失函数专题详解
Apr 26 Python
分析python请求数据
Aug 19 Python
python处理两种分隔符的数据集方法
Dec 12 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
python 基于opencv 绘制图像轮廓
Dec 11 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一些十分严重的缺陷详解
2013/06/03 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
Node.js编码规范
2014/07/14 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
实例讲解React 组件
2020/07/07 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
八一演出活动方案
2014/02/03 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
经典安踏广告词
2014/03/21 职场文书
人口与计划生育责任书
2015/05/09 职场文书
汉字听写大会观后感
2015/06/12 职场文书
初中班主任工作随笔
2015/08/15 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
分析Python list操作为什么会错误
2021/11/17 Python
Python各协议下socket黏包问题原理
2022/04/12 Python
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技