利用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")


原文地址:https://www.cnblogs.com/charlie-learnbar/p/13475398.html