基于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调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
python利用lxml读写xml格式的文件
Aug 10 Python
python http接口自动化脚本详解
Jan 02 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 Python
使用keras实现孪生网络中的权值共享教程
Jun 11 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
Python 如何安装Selenium
May 06 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
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
django基础学习之send_mail功能
2019/08/07 Python
浅谈Python协程
2020/06/17 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
PHP如何与mysql建立链接
2013/05/05 面试题
中文专业毕业生自荐书范文
2014/01/04 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
求职信格式要求
2014/05/23 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
老干部工作汇报材料
2014/10/28 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
小王子读书笔记
2015/06/29 职场文书
环保建议书范文
2015/09/14 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis