上传操作有两种情况
1.如果是input可以直接输入路径的,那么直接调用send_keys输入路径
2.非input标签的上传,则需要借助第三方工具
2.1 AutoIt 我们去调用其生成的au3或exe文件
2.2 SendKeys第三方库(目前只支持到2.7版本)
网址:http://pypi.python.org/pypi/SendKeys
2.3 Python pywin32库,识别对话框句柄,进行操作
工具:pywin32和spy++
安装 pywin32
pip install pywin32
安装winspy
下载地址:https://sourceforge.net/projects/winspyex/
下载下来后直接解压就可以了
上传操作:
import win32gui
import win32con
dialog = win32gui.FindWindow("#32770","打开") # 一级窗口
# 找到窗口
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,"打开(&0)") # 二级
filepath = 'D:\\apk.txt'
# 操作
win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,filepath) # 发送文件路径
win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button) # 点击打开按钮
win32gui.FindWindow(IpClassName,IpWindowName)
自顶层窗口开始寻找匹配条件的窗口,并返回这个窗口的句柄
IpClassName:类名,在spy++里能看到
IpWindowName:窗口名,标题栏上能看到的名字
win32gui.FindWindowEx(hwndParent=0,hwndChildAfter=0,IpszClass=None,IpWindow=None)
搜索类名和窗体名匹配的窗体,并返回这个窗体的句柄,找不到就返回0
hwndParent:若不为0,则搜索句柄为hwndParent窗体的子窗体
hwndChildAfter:若不为0,则按照z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个字窗体开始搜索
IpszClassName:字符型,是窗体的类名,这个可以在spy++里找到
IpWindowName:字符型,是窗口名,也就是标题上你能看见的那个标题
win32gui.SendMessage(hWnd,Msg,wParam,IParam)
hWnd:整型,接收消息的窗体句柄
Msg:整型,要发送的消息,这些消息都是Windows预先定义好的
wParam:整型,消息的wParam参数
IParam:整型,消息的IParam参数
实例(Chrome浏览器),只支持Windows:
import win32gui
import win32con
def upload(filepath):
dialog = win32gui.FindWindow("#32770","打开") # 一级窗口 # 如果是其他浏览器,可能需要改第二个参数
# 找到窗口
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,"打开(&0)") # 二级
# 操作
win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,filepath) # 发送文件路径
win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button) # 点击打开按钮