• 利用AutoIt3多参数化上传图片--java 和python的引用


    1. 三方工具安装

    autoit-v3-setup下载地址
    如果打不开可以直接通过云盘下载:百度云盘链接地址 提取码:fdnz
    安装过程直接下一步就行(注意下选择32位还是64位)
    在这里插入图片描述

    2. autoit-v3的使用

    话不多说先直接上代码:

    ControlFocus("打开","","Edit1")
    WinWait("[CLASS:#32770]","","10")
    ControlSetText("打开","","Edit1",$CmdLineRaw)
    Sleep(100)
    ControlClick("打开","","Button1")

    然后在开始–程序找到 Autolt Window Info 打开,位数自己选择
    打开后看到如下界面:
    在这里插入图片描述
    代码解释:
    第一行代码:ControlFocus(“打开”,"",“Edit1”)
    ControlFocus ( “title”, “窗口文本”, controlID) 设置输入焦点到指定窗口的某个控件上。这里的“窗口文本”可以不写在这里插入图片描述
    第二行代码:WinWait("[CLASS:#32770]","",“10”)
    WinWait ( “title题” , “窗口文本” , 超时时间 ) 暂停脚本的执行直至指定窗口存在(出现)为止;这里的“窗口文本”可以不写
    在这里插入图片描述

    第三行代码:ControlSetText(“打开”,"",“Edit1”,$ CmdLineRaw)
    ControlSetText ( “title”, “窗口文本”, controlID, “新文本” ) 修改指定控件的文本;这里的“窗口文本”可以不写。$CmdLineRaw是什么意思后面讲
    在这里插入图片描述
    第五行代码:ControlClick(“打开”,"",“Button1”)
    ControlClick ( “title”, “窗口文本”, 控件ID , 按钮 , 点击次数 ) 向指定控件发送鼠标点击命令;这里有些参数可以不用写
    在这里插入图片描述

    然进行保存,保存后会生成au3后缀的文件。然后通过Compile Script to .exe
    将脚本转化成exe文件。
    在这里插入图片描述
    在这里插入图片描述
    在工作使用中文件上传的弹窗基本一样,大多数情况只需要下title就可以了,甚至有些时候根本不用修改。
    在这里插入图片描述

    3.python代码调用exe实现文件上传

    import os
    #path1是exe的路劲。例如:F:workspaceprivate_cloudslibrarysfilename.exe
    #path2是需要上传文件的路径。例如:F:1.txt
    os.system(‘{0} {1}’.format(path1,path2))#注意中间有空格




    3.2Java代码调用exe实现文件上传

     

    AutoIt3的脚本如下:

    ControlFocus("打开","","Edit1")

    WinWait("[CLASS:#32770]","",100) ;等待0.1秒

    ControlSetText("打开", "", "Edit1", $CmdLineRaw) ;打开文件目录
    WinWait("[CLASS:#32770]","",2000) ;等待0.1秒
    ;Send("{ENTER}") ;敲回

    WinWait("[CLASS:#32770]","",5000) ;等待0.1秒

    ControlClick("打开", "","Button1");

    JAVA调用方法如下:   引入的名称要加入引号,选中图片后,默认会加入" "

    String picName = "d:\"+""图片3.png" "图片2.png"";

    Runtime.getRuntime().exec("businessGroup/community-autotest-ui/src/main/resources/uploadCmd.exe " +picName);
     

    4.命令行参数

    $CmdLine[0] 获取的是命令行参数的总数,在上例中 $CmdLine[0]=3
    $CmdLine[1]~ $CmdLine[63] 获取的是命令行参数第1到第63位,这个方式最多只能获取63个参数,不过正常情况下是足够用的
    $CmdLineRaw 获取的是未拆分的所有参数,是一个长字符串,这种情况下不局限与63个参数。
    备注:这段资料在网上找的, $CmdLineRaw 参数超过69个好像就不能上传了(个人遇到的仅供参考)

    5.上传文件/文件夹

    上传单文件:
    只需要把第三行代码稍微改一下就行了例如:
    ControlSetText(“打开”,"",“Edit1”,“D:upload_file.txt”)

    多文件同时上传(不限个数)
    第三行代码:ControlSetText(“打开”,"",“Edit1”,$CmdLineRaw)保持不变。我这里专门写了一个方法,无论你是传入的列表、json还是单个文件,统一将参数格式化为下图的格式。
    在这里插入图片描述
    这里单独说一下参数是json格式时的情况,我这里是在excel写成类似字典的格式
    ,python读取后是str类型,所有我通过json.loads将其转化为字典类型的。类似下图,注意这里要是英文双引号
    在这里插入图片描述
    格式化代码:

        def path_format(self, path):
            '''
            将多个文件所在位置(路径)进行格式化,转化为指定的格式
            :param path: 需要上传文件的路径
            :return: 将格式化的文件格式返回 "F:1.txt" "F:2.txt" "F:3.txt" 
            '''
            file_names = ''
            if type(path) is list:
                for i in path:
                    file_names = file_names + '"' + i + '"' + ' '
                return file_names
            else:
                try:
                    data = json.loads(path)
                    for i in data.values():
                        file_names = file_names + '"' + i + '"' + ' '
                    return file_names
                except:
                    return path
                    
    	def fileUpload(self, path1, path2):
    		'''
    		文件上传
    		:param path1: 文件路径(.au3转换的.exe)
    		:param path2: 需要上传文件格式,从path_format方法获取
    		:return:
    		'''
    		sleep(2)
    		path3 = self.path_format(path2)
    		os.system(path1 + ' ' + path3)

    上传文件夹
    与上传文件一样,将文件路径换成文件夹路径就可以了
    在这里插入图片描述

    ControlFocus("选择要上传的文件夹","","Edit1")
    WinWait("[CLASS:#32770]","","10")
    ControlSetText("选择要上传的文件夹","","Edit1",$CmdLineRaw)
    Sleep(100)
    ControlClick("选择要上传的文件夹","","Button1")


  • 相关阅读:
    [实战]MVC5+EF6+MySql企业网盘实战(27)——应用列表
    [实战]MVC5+EF6+MySql企业网盘实战(26)——音乐列表
    [实战]MVC5+EF6+MySql企业网盘实战(25)——种子列表
    [实战]MVC5+EF6+MySql企业网盘实战(24)——视频列表
    [实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表
    [Angularjs]angular ng-repeat与js特效加载先后导致的问题
    [实战]MVC5+EF6+MySql企业网盘实战(22)——图片列表
    [实战]MVC5+EF6+MySql企业网盘实战(21)——网盘操作日志
    await和async在一般处理程序中的使用
    mormot当作内存数据库(缓存)使用
  • 原文地址:https://www.cnblogs.com/charlie-learnbar/p/13475398.html
Copyright © 2020-2023  润新知