一、前言

在做web自动化,遇见上传文件一般有两种情况:

1、如果是input可以直接输入路径的,那么直接调用send_keys输入路径。

2、非input标签的上传,则需要借助第三发工具。如Pywin32库和WinSpy工具

二、input标签上传文件

大致思路:以百度首页上传图片为例,首席点击图像元素,弹出选择文件按钮,再次往选择文件按钮直接输入文件路径,此时图片就上床成功了。

import time
from selenium import webdriver
from lesson_文件上传 import UploadFiledriver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.maximize_window()
driver.implicitly_wait(5)# 1、定位图像元素
driver.find_element('xpath',"//span[@class='soutu-btn']").click()
# 2、文件路径
img_path = r"C:\Users\老王\Pictures\Sunrise.jpg"
# 2、定位选择文件,input标签直接输入
driver.find_element('xpath',"//input[@class='upload-pic']").send_keys(img_path)
time.sleep(3)
driver.quit()

三、非input标签上传文件

1、工具:pip install pywin32    和   下载WinSpy

2、WinSpy工具为识别windows控件的工具,pywin32需要一层一层往里面找到要操作的文件输入框和打开按钮。

谷歌浏览器中上传窗口如下:

 文件输入框的路径为:上传窗口--ComboBoxEx32--ComboBox--Edit

按钮路径为:上传窗口--Button

在pywin32中,查找一层窗口的方法为:win32gui模块下的FindWindow

在某窗口查找子窗口的方法为:win32gui模块下的FindWindowEx

执行编辑、点击操作的方法为:win32gui模块下的SendMessage

以下是函数的说明;

pywin32用到的函数说明:

1、dialog = win32gui.FindWindow('#32770', title) --自顶层窗口开始寻找匹配条件的窗口,并返回这个窗口的句柄。

IpClassName:类名,在spy中可以看到(上面截图中-拖到打开二字就可以了)

IpWindowName:窗口名,标题栏上能看到的名字

2、ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)--搜索类型和窗体名匹配的窗体,并返回这个窗体的句柄,找不到就返回0.

hwndParent:若不为o,则搜索句柄为hwndParent窗体的子窗体。

hwndChildAfter:若不为0,则安装z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个子窗体开始搜索。我们代码中传的参数为0

IpClassName:类名,在spy中可以看到()

IpWindowName:窗口名,标题栏上能看到的名字    注意 定位三四级窗口一样的原理

3、win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)--输入文件的路径

hWnd:整型,接收消息的窗体句柄

Msg:整型,要发送的信息,这些消息都是windows预先定义好的

wParam:整型,消息的wParam参数

IParam:整型,消息的IParam参数

下面分享代码示例:以element为例,上传文件成功

import time
from selenium import webdriver
from lesson_文件上传 import UploadFiledriver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(5)driver.get('https://element.eleme.cn/#/zh-CN/component/upload')# 1、定位elemnt组件上传按钮元素
driver.find_element('xpath',"(//span[text()='点击上传'])[1]").click()
time.sleep(1)
filePath = r"C:\Users\老王\Pictures\james.jpg"
# 2、调用封装好的方法
UploadFile().upload_file(filepath=filePath,title='打开')
time.sleep(3)

谷歌浏览器与windows窗口的上传窗口交互,代码如下:

import win32con
import win32guiclass UploadFile:def upload_file(self, filepath, title):'''windows窗口上传文件的操作:param filepath: 需要上传文件路径:param title: 打开的windows上传文件窗口的名称,不同浏览器的名称不同:return:None'''# 根据spy++工具判断需要上传文件的窗口为几级窗口,输入文件路径的文本框有四级目录# 先定位到一级窗口,即弹出的Windows界面dialog = win32gui.FindWindow('#32770', title)# 定位到二级窗口,由于二级窗口无文本内容,则第四位参数为NoneComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)# 定位到三级窗口ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)# 定位到四级窗口,文本框输入框edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)# 定位打开按钮,打开按钮只有两级,第一级为dialog=win32gui.FindWindow('#32770','打开')button = win32gui.FindWindowEx(dialog, 0, 'Button', '打开(&O)')# 输入传入文件的路径win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)# 点击打开按钮win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)if __name__ == '__main__':filePath = r"C:\Users\老王\Pictures\james.jpg"UploadFile().upload_file(filepath=filePath, title='打开')

ps;在进行debug时,只需要用谷歌浏览器点开一个上传文件的窗口,然后运行代码,就可以看到文件上传成功。其他浏览器参照以上代码,修改相应的参数即可。

web自动化文件上传--Pywin32库和WinSpy工具相关推荐

  1. Web自动化文件上传操作_Chrom

    web自动化中适用于Chrom浏览器的文件上传操作: import win32gui import win32con#谷歌浏览器,固定用法 def file_upload(path):dialog=w ...

  2. [ctfshow]web入门——文件上传(web156-web163)

    [ctfshow]web入门--文件上传(web156-web163) [ctfshow]web入门--文件上传 [ctfshow]web入门--文件上传(web156-web163) web156 ...

  3. 2020小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)

    WEB 漏洞-文件上传之后端黑白名单绕过 前言 文件上传常见验证 后缀名,类型,文件头等 后缀名:黑名单,白名单 黑名单:明确不允许上传的格式后缀 asp php jsp cgi war- 缺陷:在定 ...

  4. WEB漏洞-文件上传之后端黑白名单绕过

    WEB漏洞-文件上传之后端黑白名单绕过 文件上传常见验证:后缀名,类型,文件头 后缀名:黑名单,白名单 黑名单:asp php jsp aspx cgi war- 白名单: txt jpg zip r ...

  5. 2020小迪培训(第20天WEB 漏洞-文件上传之基础及过滤方式)

    WEB 漏洞-文件上传之基础及过滤方式 前言 知识点 什么是文件上传漏洞? 有文件上传不一定存在漏洞 凡是存在文件上传的地方/功能的地方都可以进行文件上传漏洞测试 上传文件操作的代码的完整性.安全性, ...

  6. CTFshow——web入门——文件上传

    web入门-文件上传 web151 web152 web153 web154 web155 web156 web157 web158 web159 web160 web161 web162.web16 ...

  7. PHP文件上传,下载,Sql工具类!

    PHP文件上传,下载,Sql工具类! 对文件大小,文件类型 同名覆盖 中文转码的操作,可直接使用 前台 upload.html <!DOCTYPE html> <html> & ...

  8. springboot文件上传、下载使用ftp工具将文件上传至服务器

    springboot文件上传.下载使用ftp工具 首先在服务器搭建ftp服务 配置文件(在application.properties中) # Single file max size multipa ...

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

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

最新文章

  1. 对操作系统安全构成威胁的问题
  2. AJAX相关JS代码片段和部分浏览器模型
  3. 使用tf.print()打印tensor内容
  4. 以太坊 node data write error_Node之 创建服务器与客户端
  5. 一道关于 fork 的笔试题
  6. 02(c)多元无约束优化问题-牛顿法
  7. 山东计算机专业的在职硕士,山东轻工业学院在职研究生计算机专业如何复习
  8. php重定向http请求
  9. 10分钟就能搭建远程开发环境?你早点怎么不出现(#`n´)!
  10. stm32f072--定时器17使用CH1N通道输出pwm时没有波形的原因
  11. 物理用不用计算机,计算物理学到底是干什么的?
  12. 2021-09-30 node上传文件的问题以及如何选择适合自己的插件
  13. 关于爱情和婚姻的见解
  14. 防火墙 蓝精灵DoS P127
  15. android系统升级实现,疯狂升级的Android系统
  16. linux防火墙关了连不上,SecrueCRT连接linux需要关闭linux防火墙_Centos 6.4 iptables防火墙关闭启动详解...
  17. vm无法连接虚拟设备sata01_无法连接虚拟设备sata0:1怎样解决?
  18. 前端知识学习——html
  19. 武汉理工大学计算机学院转专业细则,武汉理工大学本科四条途径调整专业
  20. 小米笔记本Air 13.3 的键盘功能按键使用方式

热门文章

  1. SEO中影响网站排名的49个因素(完整版)
  2. 2021年安全员-B证考试报名及安全员-B证最新解析
  3. 23种设计模式——组合模式
  4. 算法-树-反转二叉树
  5. 盛世昊通解析智能时代,关于未来出行的畅享
  6. 传感器自学笔记第十六章——双轴摇杆模块
  7. 在Word中的MathType统一批量修改字号大小
  8. 全球及中国视频高温计行业商业模式分析及投资风险预测2022年版
  9. ORA-00257 archiver error 错误的处理方法
  10. 关于重装系统与Visual Studio 2015