web自动化中的上传操作

上传操作有两种情况:

  1、如果是input可以直接输入路径的,可以直接调用send_keys()输入路径,具体实现可以参照https://www.cnblogs.com/wsk1988/p/12705374.html

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

    2-1、AutoIt  我们去调用其生成的au3或者exe文件

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

    2-3、Python pywin32库,识别对话框句柄,进行操作

    2-4、pyatoit   如果操作非window控件  可以了解这个

  使用工具:

    pywin32和spy++      

dialog=win32gui.FindWindow(lpClassName,lpWindowName)
自顶层创久开始寻找匹配条件的窗口,并返回这个窗口的句柄
lpClassName: 类名,在Spy++里能看到
lpWindowName: 窗口名,在标题栏上能看到的名字

comboBoxEx32=win32gui.FindWindowEx(hwndParent=0,hwndChildAfter=0,lpszClass=None,lpszWindow=None)
搜索类名和窗体名匹配的窗体,并返回这个窗体的句柄,找不到就返回0
hwndParent: 若不为0,则搜索句柄为hwndParent窗体的子窗体
hwndChildAfter:若不为0,则按照z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个子窗体开始搜索
lpszClass:字符型,是窗体的类名,这个可以在spy++里找到
lpszWindow:字符型,是窗口名,也就是标题栏上你能看到的那个标题(spy中的text),没有传None

win32gui.SendMessage(hWnd,Msg,wParam,lParam)
hWnd:整型,接收消息的窗体句柄
Msg: 整型,要发送的消息,这些消息都是windows预先定义好的
wParam:整型,消息的wParam参数
lParam:整型,消息的lParam参数


代码实现如下:
 1 import win32gui
 2 import win32con
 3 # 谷歌浏览器上传文件
 4 def upload_file(filepath):
 5     # 找到一级窗口,返回这个窗口的句柄
 6     dialog=win32gui.FindWindow("#32770","打开")
 7     # 找到二级窗口
 8     comboBoxEx32=win32gui.FindWindowEx(dialog,0,"ComboBoxEx32",None)
 9     # 找到三级窗口
10     comboBox=win32gui.FindWindowEx(comboBoxEx32,0,"ComboBox",None)
11     # 找到四级窗口
12     edit=win32gui.FindWindowEx(comboBox,0,"Edit",None)
13     # 找到打开窗口-二级窗口
14     button=win32gui.FindWindowEx(dialog,0,"Button","打开(&O)")
15 
16     # 操作
17     # 输入文件地址
18     # 点击打开按钮,提交文件
19     win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,filepath)  #发送文件的路径 filepath上传的文件路径
20     win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button)

备注:

谷歌浏览器实现文件上传的方式,这个函数可以直接使用,如果是其他的浏览器只需要更改一下     dialog=win32gui.FindWindow("#32770","打开")改成对应的参数就可以了          

原文地址:https://www.cnblogs.com/wsk1988/p/12710501.html