web自动化之上传文件

在一些页面上会存在上传本地文档操作,有的是直接给上传路径,有的则是弹出widows上传界面如下图,针对widows上传界面无法使用F12定位到元素,则使用到工具pywin32和spy++(识别Windows控件的工具)

web自动化之上传文件

首先使用winspy++工具定位windows窗口元素,拖动靶心到要定位的元素上,在winspy工具上会自动生成元素的属性值,使用方法如下:

web自动化之上传文件

 

点击工具下面的Tree可以看到元素位于第几层,windows窗口元素定位需要按照层级一层一层进行定位,上面定位到输入路径框位于第四层

web自动化之上传文件

 

接下来使用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)

  

上一篇:keepBigger 组件遇上 dialog animation


下一篇:vue element dialog 对话框