关于IUIAutomation接口的一些应用讨论
本帖最后由 zghwelcome 于 2020-1-7 14:08 编辑前言: 因小的才疏学浅,本帖不上代码,仅对这个接口能帮我们实现哪些操作做个探讨.
1. 什么是IUIAutomation接口?请移步这里了解下 https://docs.microsoft.com/zh-cn/windows/desktop/api/uiautomationclient/nn-uiautomationclient-iuiautomation
2. 这个接口帮我们能做些什么?
Autoit3 操作标准控件是非常便利的,但是遇到自绘窗口(非标准控件)的操作却是一筹莫展。利用IUIAutomation接口,我们可以非常便利的操控非标准控件的窗口(前提是:这个非标准控件窗口支持IUIAutomation接口)。
3.如何知道哪些窗口支持这个接口呢?你可能需要用到的测试工具:Inspect.exe
Inspect这个工具非常便利,把鼠标移动任意坐标,Inspect就会得到该坐标最顶端的IUIAutomation接口元素。
4.如何从0基础入手学习这个接口呢?
英文官网已经有个UDF,可以从这里学习使用方法: https://www.autoitscript.com/forum/topic/153520-iuiautomation-ms-framework-automate-chrome-ff-ie/?tab=comments#comment-1105530
这个接口可不仅限于操控谷歌、IE这些浏览器窗口哦
导航:
2F 利用该接口获取QQ聊天窗口的聊天记录消息
3F 在简单滑块验证中的应用测试,以TB滑块验证为例
4F 在中等难度的滑动拼图验证测试,以企*鹅为例演示
7F 在浏览器网页填表中的应用,以某度搜索关键词为例
12F 进阶篇●高等难度的滑块拖动验证测试 (以J*D为例)
UIA接口使用Demo 1.通过UIA接口、HOOK系统Event监控QQ窗口消息和输入
2.Au3与web交互简单demo,关键词【UIA、回调、IE、对象】
在浏览器网页填表中的应用,以某度搜索关键词为例
如上图所示,UIA接口中有两种方法可以实现点击,分别是 "Invoke.Invoke" 和 "LegacyIAccessible.DoDefaultAction"
后者更通用,可以实现网页中链接和按钮的点击操作。
还有一种方法 "LegacyIAccessible.SetValue" 可以实现对可修改值的元素设置新的内容
这三种方法就可以实现网页填表了,无需鼠标移动和点击操作,精准高效
定位搜索栏元素和搜索按钮元素方法我就不累述了
下图是谷歌浏览器BD搜索演示:
本帖最后由 zghwelcome 于 2019-6-19 15:19 编辑
利用该接口获取QQ聊天窗口的聊天记录消息
先上图,后说话
QQ聊天窗口是一个非标准控件窗口,Au3的信息抓取工具Au3Info,根本就没法抓取里面的聊天记录,但是我们可以利用该接口完成该操作。
打开工具Inspect.exe, 我们把鼠标移动到聊天记录区域稍停片刻,Inspect上面就会展示该区域的元素信息, 上图中绿色框选部分相当于该元素的属性,ControlType 可以理解为标准控件中的控件类型。
元素的文字信息一般体现在元素属性"Name" 或 "Value.Value" 中。所以,在枚举某个窗口某种控件类型(ControlType)的集合后,可以利用属性"Name" 或 "Value.Value" 精确定位元素对象,并实现操控。
那么获取QQ聊天窗口的聊天记录思路为:
枚举该窗口的所有控件类型 UIA_EditControlTypeId , 然后判断每个元素对象的属性"Name" ,如果值为 "消息", 那么我们就取该元素的属性 "Value.Value" 的值------即为我们需要的聊天记录信息!
本帖最后由 zghwelcome 于 2019-6-19 19:54 编辑
在简单滑块验证中的应用测试,以TB滑块验证为例TB的登录滑块验证是相当简单的了,无需识图就可以精准操作。先上图
这是谷歌浏览器中的登录界面,乱输入几次后触发出拖动验证。
在浏览器页面内,每句话,每个图片,每个Input框,每个Button等等...,都是UIA接口中的一个元素,它们都有自己的元素属性、及属性值。
如何判断登录界面出现拖动验证了呢?只需判断 UIA_TextControlTypeId 该控件集合中是否有元素的 "Name" 属性值为 "请按住滑块,拖动到最右边",如果有则说明需要拖动验证了。
拖动验证,首先需要定位上图标识 "①"滑块的起始位置,和拖动到的结束位置。
通过工具 Inspect,我们发现下图中的元素关系
我们只需先定位元素 "请按住滑块,拖动到最右边" 这个文本控件,它的矩形区域右边坐标即是拖动的结束位置,它的前一个元素就是滑块拖动的起点位置。
拖动效果如下图(不受桌面分辨率,浏览器缩放影响)
本帖最后由 zghwelcome 于 2019-6-19 20:34 编辑
在中等难度的滑动拼图验证测试,以企*鹅为例演示先上图
这种验证就比TB的复杂不少,如上图,也需要定位红色滑块(左一)的位置、大小,以及获取绿色背景框的右侧边界
这两个元素与TB不同,控件类型是 UIA_ImageControlTypeId (图片) ,如何定位就不累述了,无非就是利用元素属性判断。
企*鹅的滑动验证的拖动结束位置有个取巧的方法,大概率会出现上图中文字说明的情况,获取绿色框右侧边界,往左侧减一个红色框大小就是拖动的结束位置。
如果偶尔出现不是这种情况的话,验证失败,可以刷新下验证,再重新识别拖动。85%的几率一次成功
下图是演示效果(可以通用企*鹅各平台登录界面,背景越复杂,效率越慢):
这个可以发在资料区或者交流区 afan 发表于 2019-6-19 16:15
这个可以发在资料区或者交流区
麻烦A版移一下 推推... 可以好好參考了。 辛苦了~ 有空可以学学 厉害了,楼主伟大! 看下看下,小白上路,请多关照,不胜感激 进阶篇●高等难度的滑块拖动验证测试 (以J*D为例)
先上图:
难点提示:
1. 背景复杂,滑块左右位置-X坐标漂浮不定,不能像企*鹅拖动验证那样可以取巧(如前面篇章所述,上下位置-Y坐标我们已经可以轻松get)
2. J*D还加入了JS的鼠标轨迹检测,即使我们取到准确的滑块拖动结束的X坐标, MouseClickDrag 的匀速拖动也会令失败率高达90%以上
这个情况难道真得用深度学习或机器视觉学习才能解决问题吗?如果有这个时间精力这个方法当然是一个不错的选择,下面来介绍怎么用纯AU3借用UIA接口解决
(如果初识AU3,建议不要点进来浪费时间,没有代码,只有思路)
**** Hidden Message *****
有代码就完美了! 不会用啊 ! 这个要好好研究一下!