用autoit识别windows窗口(保存弹窗及登陆(basic认证)相关的弹窗)-----
须知1:basic认证是代码里写的,弹出框是浏览器自带的(一般IE中自带的弹框一般是windows弹窗)
须知2:当保存某个文件、图片等(下载时,保存某个东西时)会有一个保存的弹窗(一般是windows弹窗)
基本大步骤:使用autoit,捕捉到控件后,编写au3脚本,生成exe,然后java调用exe
1、安装步骤:
1>解压autoit3压缩包
2>点击进入Scite文件中
3>双击SciTE.exe
4>点击运行即可进入到Scite工作界面中
2、使用说明
1>进入到进入到Scite工作界面中后,把固定的源码粘贴上去
固定代码格式如下:
A、处理保存弹窗的源码
ControlFocus("保存图片", "","Edit1")
;ControlFocus("title","text",controlID) Edit1=Edit instance 1
;Dim $name = _Date_Time_GetLocalTime()
WinWait("[CLASS:#32770]","",10)
ControlSetText("保存图片", "", "Edit1", "C:\auto1.png")
Sleep(2000)
ControlClick("保存图片", "","Button1");
B、处理登陆相关的弹窗源码
Dim $account = "gmsdtech"
Dim $pwd = "111111"
Dim $dialogTitle = "Windows 安全"
WinActivate($dialogTitle)
WinWaitActive($dialogTitle)
Sleep(1*100)
ControlSetText($dialogTitle,"","Edit1",$account)
Sleep(1*100)
ControlSetText($dialogTitle,"","Edit2",$pwd )
ControlClick($dialogTitle,"","Button2")
Sleep(1*100)
2> 保存Scite工作界面中的脚本源码(把以上的脚本编码保存到一个地方之后才可以运行脚本源码),保存的文件的格式是.au3格式。
3>打开系统弹窗(或者登陆时弹出的系统弹出,例如交易后台登陆)然后运行脚本,看是否可以运行成功
4>当系统弹窗无法应时,则修改以上的脚本编码,具体修改方法如下(以保存弹出 为例)
4.1>打开如下工具
图一:
图二:点击运行
4.2>单击点击如下查询工具,鼠标不要放开,然后去弹窗中找对应的元素然后更脚本编码
4.3>通过找到的元素来更改编码
A、处理保存弹窗的源码
ControlFocus("保存图片", "","Edit1")
;ControlFocus("title","text",controlID) Edit1=Edit instance 1
;Dim $name = _Date_Time_GetLocalTime()
WinWait("[CLASS:#32770]","",10)
ControlSetText("保存图片", "", "Edit1", "C:\auto1.png")
Sleep(2000)
ControlClick("保存图片", "","Button1");
图一:获取弹出最外层然后更改参数
图二:获取输入框然后更改参数
图三:获取保存按钮然后更改参数
5>运行调整好的脚本编码,看是否可以调通,如果可以调通则把该脚本转换成.exe格式(以上步骤保存的时候格式是.au3格式)
5.1>用解压autoit3压缩包中的一个文件进行转换
5.2>双击并运行一下.exe文件
5.3> 选择以上保存的.au3格式的文件,为新转换的exe文件选择一个路径然后执行转换 (如下图)
6>用Java程序调用以上exe文件(代码如下)
package com.gmsd.gommon; import java.io.InputStream; import java.util.Properties; import org.apache.commons.io.filefilter.TrueFileFilter; import jdk.nashorn.internal.codegen.RuntimeCallSite; public static void safeDialog(){ Runtime time=Runtime.getRuntime(); Process p=null; try { p=time.exec("\"D:/workspace/test.exe\""); } catch (Exception e) { // TODO: handle exception System.out.println("exeER"); } }