基于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 文件重命名工具代码
Jul 26 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
python字典DICT类型合并详解
Aug 17 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
Python小进度条显示代码
Mar 05 Python
TensorFlow tensor的拼接实例
Jan 19 Python
浅析Python 序列化与反序列化
Aug 05 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
python glom模块的使用简介
Apr 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面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
PHP安全上传图片的方法
2015/03/21 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
vue实现通讯录功能
2018/07/14 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
详解Python中的正则表达式的用法
2015/04/09 Python
Python3处理文件中每个词的方法
2015/05/22 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
Django 解决由save方法引发的错误
2020/05/21 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
大二法学专业职业生涯规划范文
2014/02/12 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
2015年组织部工作总结
2015/04/03 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers