一、背景说明
微信作为一种广泛使用的通讯工具,通讯录中包含了大量的客户、合作伙伴或员工的联系信息。
在某些情况下,可能需要将微信通讯录中的联系信息导出,用于数据分析、客户关系管理(CRM)系统更新、备份或其他合法的商业用途。
微信本身并不提供直接的通讯录导出功能,这就需要通过自动化工具来实现。
今天分享一个RPA导出微信通讯录到excel案例。
二、需求分析
![](https://static.xiaobot.net/file/2024-05-08/514295/59376b9c9f90f94bc632c3ba8e2a8fb4.png!post)
正常操作步骤:
打开微信窗口
点击通讯录
点击好友
获取信息
四个步骤即完成第一个通讯录信息的获取,但我们是需要获取多个通讯录信息,就需要反复操作以上的几个步骤,直到获取完通讯录为止。
流程图:
![](https://static.xiaobot.net/file/2024-05-08/514295/3c34f328f1c31a1305b6e84d61a602e0.png!post)
流程不复杂,但实现过程中,细节上有难点。
三、前置条件
1)提前准备一个excel文件
![](https://static.xiaobot.net/file/2024-05-08/514295/1d20b7bc5071fb07f362521166374a77.png!post)
2)设置一个通讯录数量
通讯录列表,我们不知道具体多少个好友
因此获取通讯录是使用无限循环指令,需要一个终止的条件。
比如好友有300个,那么就设置数量为300,达到这个数量,RPA机器人会终止执行。
四、实现思路
问题一:
打开通讯录,通常会看到【新的朋友】,【公众号】,【企业微信通知】
这几个是不需要获取信息的,可以直接跳过。
![](https://static.xiaobot.net/file/2024-05-08/514295/2099194e7cf01fb1e8fc46728f922e99.png!post)
解决思路:
提前将窗口滑动到第一个通讯录的位置,只需要从通讯录第一个开始获取信息,
通讯录都有字母编排,A就是最前面的一个了。
![](https://static.xiaobot.net/file/2024-05-08/514295/aa2758d2078c8f95e9f2d4af495e98f8.png!post)
问题二:
通讯录中间会出现【微信团队】,【文件传输助手】
这两个也不用获取信息,要跳过操作,否则会导致异常中断
![](https://static.xiaobot.net/file/2024-05-08/514295/c1785eb690c9b8e36f43257b22dd055c.png!post)
解决思路:
添加一个【Try Catch】指令,如果获取不到通讯录信息,会有异常,则跳过当前步骤,继续执行下一次操作
![](https://static.xiaobot.net/file/2024-05-08/514295/981c1215d1d211880b86a265720edcf7.png!post)
问题三:
如果是小窗口,正常只能获取到【10个】通讯录好友,
每次操作完成10个,就要滑动鼠标!!
这里就有两个问题:
操作到第几个通讯录好友,开始滑动鼠标?
滑动鼠标,滚轮应该滑动多少次数?
![](https://static.xiaobot.net/file/2024-05-08/514295/5b6285eee0181e6475f0901ea73c3c4e.png!post)
解决思路:
刚开始我使用获取相似元素的方式实现
![](https://static.xiaobot.net/file/2024-05-08/514295/4b6847f4ffd57dca55db6685eacd64f7.png!post)
新的问题产生了
1)鼠标下滑滚动的次数,没有一个具体指标值,下滑滚动次数不够,重新捕获元素会导致重复点击,重复获取数据
2)原先的思路是每次操作到第9个,则提前【滑动】鼠标滚轮,实现翻页效果。
如果下滑次数偏多,也会导致上一次还没有点击的通讯录被滑掉了,停留在遮挡区,之后就点击不到了!!!
![](https://static.xiaobot.net/file/2024-05-08/514295/f7832b42acd13463f39f6e2410a0a806.png!post)
3)还有一种极端的情况:
![](https://static.xiaobot.net/file/2024-05-08/514295/1beda32eab4dc894afa190e65c4197fc.png!post)
滑动的时候,尴尬了,最后一个通讯录好友只看到一半,鼠标也会点击不到
4)如果微信窗口最大化,会直接影响到整个流程实现,最大化的窗口,每次通讯录列表捕获到的数量就不止10个了!!!
5)鼠标会卡顿现象,导致滑动效果不佳
最终解决方案:
不要使用循环相似元素的方式,通过模拟键盘按 【DOWN】键,一个一个向下滚动,每次获取完一个通讯录,就按一次【DOWN】键。
![](https://static.xiaobot.net/file/2024-05-08/514295/78e214d7b5db8d0c54cbb4f8fe06d643.png!post)
这种方法稳定性很高,基本上兼容很多问题了。
最终效果图:
![](https://static.xiaobot.net/file/2024-05-08/514295/d26ce2e0aaa7cf3b7e99efafbe80cced.png!post)
以上提供一种解决思路,下面用数据表格的方式,实操一下:
1)设置导出数量
设置数量的目标是,后面作为一个终止条件
![](https://static.xiaobot.net/file/2024-06-28/514295/0a70a5625c003718b3da89e07a6ad1b3.png!post)
2)获取微信窗口
![](https://static.xiaobot.net/file/2024-06-28/514295/0f93b164bb901420dd7dc38cfcfc7604.png!post)
3)点击通讯录
![](https://static.xiaobot.net/file/2024-06-28/514295/09f4137f57930e2434800f064122689b.png!post)
4)鼠标停留在特定位置上
通讯录列表,会按照字母进行排序,前几个不是我们需要采集的信息,可以跳过。
![](https://static.xiaobot.net/file/2024-06-28/514295/9aeac2e619f75f5e7535acf13635306c.png!post)
![](https://static.xiaobot.net/file/2024-06-28/514295/d77150ba20bc55e4e20d62c76404978d.png!post)
![](https://static.xiaobot.net/file/2024-06-28/514295/7bc5b0910c417d6a50cb1ba15cb2bb06.png!post)
5)根据配置的导出数量次数,开始for循环
对话框的输入时文本,需要转换成为整数类型 ,点亮python语法,int(input_dialog.value)
![](https://static.xiaobot.net/file/2024-06-28/514295/7ca09b28a9c1f5729e7bfd6c8b5c361d.png!post)
6)写入昵称
捕获微信昵称元素 > 获取元素信息
![](https://static.xiaobot.net/file/2024-06-28/514295/783ddef247616077362a60fcf81ba70f.png!post)
写入数据表格
![](https://static.xiaobot.net/file/2024-06-28/514295/644b3ca4f445ca67f8f95ba055c8312b.png!post)
7)写入标签
捕获标签元素 > 获取元素信息
![](https://static.xiaobot.net/file/2024-06-28/514295/614653cfcfeff63485a64937120d4a8a.png!post)
标签不是每个好友都有,需要设置一下异常情况,捕获不到的默认值为None,方便后续判断
![](https://static.xiaobot.net/file/2024-06-28/514295/5ba1225a7143c29bc84142d991f2c349.png!post)
标签不为None,才进行写入数据表格
![](https://static.xiaobot.net/file/2024-06-28/514295/cf1f36bd0a2439721464bfa6d4300411.png!post)
![](https://static.xiaobot.net/file/2024-06-28/514295/5441e891d63deef253f75d2ff0340762.png!post)
8)继续下一个好友采集
![](https://static.xiaobot.net/file/2024-06-28/514295/8adf9f4c92df46f777987d08b628001d.png!post)
全流程:
![](https://static.xiaobot.net/file/2024-06-28/514295/ac6c6a57380cde31c6421f65f0001ae5.png!post)
![](https://img-home.csdnimg.cn/images/20230724024159.png?be=1&origin_url=https://static.xiaobot.net/file/2024-06-28/514295/65085cfbce4a597fc5eb604527553ddf.png!post)