方法一、input标签上传

    如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径。

方法二、非input标签上传

这种上传方式需要借助第三方工具,主要有以下三种情况:

1.AutoIt  去调用它生成的au3或者exe格式的文件

2.SendKeys第三方库(目前只支持到2.7版本)

  网址:SendKeys · PyPI

3.Python的pywin32库,通过识别对话框句柄来进行操作

pywin32库的安装因为文件较大,建议使用豆瓣源直接pip安装:

pip install -i https://pypi.douban.com/simple pywin32

前两种在这里不考虑,只采用第三种方法即可,使用之前可以借助工具winspy来辅助定位,winspy下载地址:WinSpy download | SourceForge.net

winspy工具的定位方法采用的是绝对路径定位,即根路径为点击上传按钮后的弹出框的整个窗口页面,一般根据Text文本值和Class属性来定位,如图所示:

根路径如图所示,它的Text文本值为“打开”,Class属性值为“#32770”。

在winspy工具左上角有个聚焦按钮,通过拖动的方式拖动到上传弹出框的对应位置(如文件路径输入框)后松开,winspy界面会显示当前定位的Text文本值(此处为空)和Class属性值(Edit),在windows的窗口下,Parent属性的值中,括号里面的就表示它上一层元素的Class属性值,可以通过点击Parent属性值跳到上一层元素,最终我们定位到文件路径输入框的Class属性路径为:Edit - combox - comboBoxEx32 - #32770。

那么同理,“打开”按钮通过同样的绝对路径方式定位,得到它的Class属性路径为:button - #32770。

通过借助winspy工具定位出了对应元素的路径,就可以通过pywin32库来实现上传操作啦!

pywin32的实现步骤为:

1、找到绝对路径输入框和“打开”按钮的元素;

2、输入绝对路径,点击打开

    在页面实现的前提条件为 :windows上传窗口已经出现,可以sleep1~2秒等待上传的弹框出现。

import win32gui
import win32condef upload(filePath, browser_type="chrome"):'''通过pywin32模块实现文件上传的操作:param filePath: 文件的绝对路径:param browser_type: 浏览器类型(默认值为chrome):return:'''if browser_type.lower() == "chrome":title = "打开"elif browser_type.lower() == "firefox":title = "文件上传"elif browser_type.lower() == "ie":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实现selenium文件上传的两种方式相关推荐

  1. 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式

    大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...

  2. JavaBean实现多个文件上传的两种方法

    JavaBean实现多个文件上传的两种方法 王新芳        刘杰 北京工商大学计算机学院 摘要:本文介绍了JavaBean实现多个文件上传的两种方法,分别是使用http协议和ftp协议实现.首先 ...

  3. 文件上传的三种方式-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

  4. Android 文件上传的几种方式

    这两天和新来的同事做一个项目,用到了文件上传,在这里记录下历程 Android文件上传有各种各样的Http框架,我也就简单说说我常用的吧,LiteHttp,OkHttp的封装还没做完全,有时间会补上, ...

  5. 图片上传的两种方式(前端和后端)

    1:前端 HTML: <html> <script type="text/javascript" src="js/jquery-3.1.1.min.js ...

  6. HTML5 文件上传的2种方式

    原文地址:http://blog.csdn.net/lovelyelfpop/article/details/71421123 以前上传文件需要提交Form表单. HTML5方式上传文件,可以通过使用 ...

  7. Android图片上传的两种方式

    图片上传,以及带参数的图片上传是Android开发中,很常见的需求.但也是接口联调难度相对比较大的技术实现,本文介绍两种可靠的图片上传方式.一是通过 MultipartBody 来实现:二是通过图片转 ...

  8. python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法

    脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个 ...

  9. Python页面自动化文件上传两种方式

    Python页面自动化测试之文件上传的两种方式 --广州_vivi 最近教学过程,学员项目出现测试上传文件无法执行的情况,分析发现学员项目的上传按钮并不是input按钮,导致无法使用直接定位元素方式进 ...

最新文章

  1. goland 交叉生成linux文件
  2. 由铁路订票系统联想到的
  3. IOS开发学习记录第3天之C语言学习
  4. 天气预报中的风向到底有啥用?
  5. [Bzoj4260]Codechef REBXOR(trie树)
  6. navicat 结构同步会加锁吗_被柜员怠慢的张小波,真的会永久地转走几个亿的结构性存款吗?...
  7. ES6(一)——字面量的增强、解构、let/const、块级作用域、暂时性死区
  8. 点钞机语音怎么打开_原来微信语音一样能转发? 居然还有人不知道
  9. python机器学习案例系列教程——层次聚类(文档聚类)
  10. python在哪个方向岗位最多_Python就业方向这么多,哪些岗位最有发展?
  11. jdk1.6-64下载
  12. ios游戏开发 Sprite Kit教程:初学者 3
  13. 启动计算机实现5秒开机,win10提高开机速度的设置教程 电脑五秒开机优化步骤...
  14. 数字图像来源:光学成像系统
  15. ppt编辑数据链接文件不可用_ppt插入图表数据不能编辑怎么办
  16. 电力行业数据安全解决方案
  17. 灵遁者:关于时间的度量和方向的说明
  18. COSCon'20 Apache Roadshow- China 精彩收官!|会场精彩回顾篇
  19. Excel中所有图片大小调整方法并将插入图片在单元格居中代码
  20. Linux下如何聊天-irc,MSN,ICQ,QQ你会用了吗?

热门文章

  1. 使用timeit测试python语句执行的时间
  2. 解决Git执行pull命令时,报错:Please enter a commit message to explain why this merge is necessary...
  3. 2021年高考成绩查询梧州市,2021年梧州高中学校排名一览表,梧州比较好的高中学校排名...
  4. 微星b450迫机炮主板,省电
  5. 看金融海啸是如何害死蚯蚓一家的(多图杀猫)
  6. 美对华光伏双反复审终裁出炉 贸易变数让厂商第三地外移计划却步
  7. 团队管理中提高团队凝聚力方法
  8. 初识Django框架
  9. 视频伪原创批量处理工具 md5视频 修改器
  10. 华为H3C交换机+Radius+mysql Radius认证认证方案,嵌入式客户端代码,配置(上:认证方案)