AutoIt操作Dynamic control Id控件

来源:互联网 发布:幼儿园床垫淘宝 编辑:程序博客网 时间:2024/06/05 19:43

在AutoIt脚本中,对要操作的控件需要知道其control id ,但是对于IE浏览器中的安全控件,其id是在打开浏览器时动态生成的,每次打开浏览器,id都不一样,是动态变化的,所以要操作这种类型的控件,需要另想办法

参考:

https://www.autoitscript.com/forum/topic/157706-how-can-i-retrieve-a-dynamic-control-id/#comment-1143379

建立AutoIT script文件,任意命名,写入以下内容:

;通过WinGetClassList函数获取窗体中的所有控件名,然后,在IE浏览器中控件动态标识符是以ATL开头的,找这类控件即可#include <MsgBoxConstants.au3>#include <IE.au3>$oIE = _IECreate ("https://pbsz.ebank.cmbchina.com/CmbBank_GenShell/UI/GenShellPC/Login/Login.aspx","0,1,1,0")Local $hWnd =WinWait("[ClASS:IEFrame]","",10)Local $sClassList = WinGetClassList($hWnd)Local $controClasss$aClassList = StringSplit($sClassList,@CRLF,2)For $i=0 To UBound($aClassList) -1   IfStringInStr(String($aClassList[$i]),"ATL")Then  $controlClass = String($aClassList[$i])  ExitLoop  EndIfNextLocal $ClassNameNN_Account =$controlClass&2 ;控件识别码,用于向控件传递参数Local $ClassNameNN_Password =$controlClass&1MsgBox($MB_SYSTEMMODAL, "",$ClassNameNN_Account)ControlSend($hWnd,"",$ClassNameNN_Account, "123456")ControlSend($hWnd,"",$ClassNameNN_Password, "111111")Sleep(5000)WinClose($hWnd)


 

以上代码存在的问题:

填入的信息不完整,比如账号只能填2345,而没有把1填进去,随机发生的,解决办法:在脚本中加入sleep语句,让其睡个3秒钟

总结:

1、分清楚Windows下的两个概念:窗口和控件,在Autoit中窗口需要使用Win**函数进行操作,控件使用control**函数进行操作,例如:

Local $hWnd = WinWait("[ClASS:IEFrame]","",10)

Local $sClassList = WinGetClassList($hWnd)

;之前写的Local $hWnd =WinWait("[ClASS:Internet Explorer_Server]","",10)是无法获取到信息的,因为根本就不存在ClASS:Internet Explorer_Server的窗口,所以读不到信息。

2、使用IEMsgBox前需要引入相关的包,否则运行时会报错

3WinGetClassList函数式关键,它能找到当前窗口里所存在的所有class信息,而控件的class信息也在其中,于是就可以去寻找到所需要的控件idid有一部分是固定的开头)。

4Autoit中,变量可以转换为字符串,它可以比较两个字符变量是否=,但是无法用包含,只能调用StringInSub()函数,该函数可以传变量,也可以传字符串

0 0