以微信作为示例,抓取微信的聊天记录

按我们的正常的思路,一般会用数据抓取功能,直接抓取微信的聊天记录,很遗憾微信并不会让我们如此轻松的获取数据

可以看见当我使用数据抓取,选择某一条消息记录时,它提示我无法自动抓取,不仅如此,连通信录抓取也会出现同样的问题

uiautomation 微信 uipath微信_uiautomation 微信


办法总比困难多,既然他不让我们用工具自动提取,我们尝试一下手动提取,先打开用户界面探测器,看看微信是个什么鬼东西

uiautomation 微信 uipath微信_uiautomation 微信_02


使用用户界面探测器,我选择了聊天框中的最后一条消息【12】,查看探测器左侧的元素树可以看见,每个消息都在一个list item类型的元素当中,而所有的消息都是list元素的子元素

uiautomation 微信 uipath微信_xml_03


既然已经找到特征了,我们现在的问题就是如何拿到这个list下的所有list item,并取出这个list item中的name属性(即对应的消息)

第一步,find element找到这个父元素,可以得到一个uielement类型的返回值,这个类型的返回值就是刚刚这个list的位置

uiautomation 微信 uipath微信_xml_04


第二步,find children获取这个父元素下的子元素,查看属性里面有四个值得关注的地方

输入的元素我忘记在截图里标注了,这个目标->元素里填入的变量值,就是上一步查找元素里返回的uielement类型的值,因为是查找一个元素的所有子元素,当然要告知程序找的是哪个元素啦

结果输出了一个枚举类型的uielement,姑且就把他当作所有子元素的集合,也就是我们刚刚说到的list item.

然后是filter参数,我们需要过滤哪一个子元素,这里我填入的也就是子元素的xml值,划重点了,我截图的xml值的name属性一栏使用的是通配符*,你如果不用通配符去匹配所有的list item元素,直接使用name = ”12“那么最后的结果肯定只有那一个list item的name = "12"的值,这个还是好理解,我简单提醒一下

然后是Scope属性,也就是我们要提取子元素的哪一级,这里选择的find_children,也就是子元素的第一级

uiautomation 微信 uipath微信_微信_05


uiautomation 微信 uipath微信_微信_06


第三步,遍历list item获取name属性值,虽然他是个枚举类型,但是依然支持foreach遍历,那么我们的遍历list item这一步就可以实现了,值得注意的是foreach当中要把item的值设置为uielement类型的,不然下一步会有点问题

uiautomation 微信 uipath微信_rpa_07


最后一步,get attribute获取属性名为"name"的值,即具体的消息,上一步我们把item的值设置成为了uielement,这一步才能在目标->元素当中填入item元素的位置,最后返回的结果就是我们要的聊天记录

uiautomation 微信 uipath微信_微信_08


输出结果:

uiautomation 微信 uipath微信_枚举类型_09


也可以按这个步骤,抓取微信的所有联系人,嗯,有问题再讨论