在一些页面上会存在上传本地文档操作,有的是直接给上传路径,有的则是弹出widows上传界面如下图,针对widows上传界面无法使用F12定位到元素,则使用到工具pywin32和spy++(识别Windows控件的工具)
首先使用winspy++工具定位windows窗口元素,拖动靶心到要定位的元素上,在winspy工具上会自动生成元素的属性值,使用方法如下:
点击工具下面的Tree可以看到元素位于第几层,windows窗口元素定位需要按照层级一层一层进行定位,上面定位到输入路径框位于第四层
接下来使用python代码实现对上传文件的操作
# 导入win32 import win32con import win32guid
定位到输入文件路径的文本框
# 根据spy++工具判断需要上传文件的窗口为几级窗口,输入文件路径的文本框有四级目录 # 先定位到一级窗口,即弹出的Windows界面 dialog=win32gui.FindWindow('#32770','打开') # 定位到二级窗口,由于二级窗口无文本内容,则第四位参数为None ComboBoxEx32 = 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)#filepath文件路径 #点击打开按钮 win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button)
上述步骤已经可以成功上传一个文件,可以自己随便打开一个windows上传窗口运行代码调试,接下来将windows页面上传操作封装起来,后面可以直接调用使用
# 导入win32 import win32con import win32gui class UploadFile: def upload_file(self,filepath,title): ''' windows窗口上传文件的操作 :param filepath: 需要上传文件路径 :param title: 打开的windows上传文件窗口的名称,不同浏览器的名称不同 :return:None ''' # 根据spy++工具判断需要上传文件的窗口为几级窗口,输入文件路径的文本框有四级目录 # 先定位到一级窗口,即弹出的Windows界面 dialog=win32gui.FindWindow('#32770',title) # 定位到二级窗口,由于二级窗口无文本内容,则第四位参数为None ComboBoxEx32 = 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)