上传操作分为两种情况:

1、input标签上传

如果是input可以直接输入路径的,那么直接调用send_keys输入路径,和前边的元素操作类似,在这里不再过多的赘述。

2、非input标签上传

非input标签上传的,则需要借助第三方的工具:

这里我们用python中的第三方库pywin32库,识别对话框句柄,进而进行上传操作

首先安装第三方库:pip install pywin32

借助winspy来辅助定位,winspy下载地址:https://sourceforge.net/projects/winspyex/

winspy工具使用的是绝对定位,和selenium中的元素定位方式不同

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

1、filePath是上传文件所在的绝对路径

2、如果你的浏览器是谷歌那么不用管,如果是其他的浏览器,看你弹出上传窗口的左上角的名字是什么,写入到else里的title=" "里边。

3、遇到Windows窗口上传的元素定位时,直接调用这个方法就可以:upload(C:\文件上传.txt)

比如火狐浏览器与谷歌不同,它的title="文件上传"

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) # 点击打开按钮

最新文章

  1. 朝花夕拾-android 自定义toast
  2. PHP 网站保存快捷方式的实现代码
  3. html,css所遇问题(一)
  4. python无私有成员变量
  5. HDU 1285
  6. 使用Cross-validation (CV) 调整Extreme learning Machine (ELM) 最优参数的实现(matlab)
  7. Volley框架使用(POST)
  8. jquery 的ready() 与window.onload()的区别
  9. Theano学习-scan循环
  10. meta 是什么??
  11. PCH 警告:标头停止点不能位于宏或#if块中
  12. C++继承中关于子类构造函数的写法
  13. SpringBoot处理静态资源的两种方式
  14. mybatis*中DefaultVFS的logger乱码问题
  15. php实现单点登录,顶级域名与子域名间共享Cookie实现单点登录原理
  16. ANg-别人家的笔记
  17. 关于页面传值页面的跳转,以及spring mvc 框架的流程问题
  18. CSS 基础 例子 最小高度和最大高度设置
  19. Python模拟Linux的Crontab, 写个任务计划需求
  20. SQL SERVER 查找锁信息

热门文章

  1. PAT 乙级 1038.统计同成绩学生 C++/Java
  2. django url注册器组件, 响应器组件, 分页器组件
  3. 201871010102-常龙龙《面向对象程序设计(java)》第四周学习总结
  4. Leecode之双指针及二分查找
  5. Comet OJ 夏季欢乐赛 完全k叉树
  6. 【java异常】expected at least 1 bean which qualifies as autowire candidate for this depende
  7. 7-ESP8266 SDK开发基础入门篇--串口处理数据,控制LED
  8. 奇技淫巧and板子
  9. 【BZOJ3837】[PA2013]Filary
  10. webpack中的hash、chunkhash、contenthash区别