1. 概述
不知你是否遇到过在微信上给通讯录中的某个人发消息,后果呈现了这一幕:
平时始终认为本人的心里素质过硬,不过遇到这种状况 …
在我缓了半个钟头(半分钟)之后,缓缓拿出了手机,关上微信,找到通讯录中的 ABC
,默默地按下了删除按钮,此刻的我心如止水 …
好了,咱们回到正题,为了防止再次出现上述情况,我决定把微信通讯录中删除了本人的人全副找进去并且删除,之前我曾经在网上理解到查看本人的微信是否被删比拟好的形式就是转账,通过转账咱们能够实现无痕检测。
上面咱们通过两张图片直观的看一下微信被删前后给他人转账的成果:
当初曾经晓得了检测形式,正在我筹备挨个检测时,有意识的滑动了微信通讯录列表,100、200 … 500 …
我去!什么时候加了这么多人,滑动列表的同时我趁势扫了一眼微信名字:A卖保险、B办理信用卡、C游泳健身、D卖保健品 … 此刻我晓得了微信通讯录中有这么多人的玄机,然而有个问题,这么多人我挨个手动执行转账还不累屎了 …
如果手动执行的形式行不通,那么能够通过编程的形式自动化执行吗?想到这里我陷入了深思 …
忽然我脑中闪了一下(不是抽筋哈),思路渐明,前几天我不是写了一篇Python + Appium 自动化操作微信入门吗?用这个应该就能够实现,编程实现的基本思路如下:
- 获取微信通讯录列表中每个人的名字(备注)并记录,这个是不会有反复的,因为即便在之前加好友时有反复的,本人也会在备注时给改了
- 遍历获取到的通讯录列表,别离对每一个人执行转账操作,如果检测到是删除本人的人就对其执行删除操作,如果检测到不是删除本人的人则持续检测下一个人,顺次往返循环
2. 环境
因之前在模拟器上测试 Appium 模仿微信转账可能有点问题,因而本文应用真机实现。
先简略介绍一下真机环境,上面一起来看一下相应步骤。
- 从桌角下取出我的小米5s手机(MIUI10.2、Android8.0.0),擦擦灰尘后用数据线将其连到本人的电脑上
- 手机充了一会电之后开机,关上微信登录本人的微信号
- 在手机中顺次执行(点击):设置->我的设施->全副参数->MIUI版本(屡次点击,开启开发者模式)->返回设置列表->更多设置->开发者选项->开启开发者选项并别离开启:USB调试、USB装置、USB调试(平安设置)选项,如图所示:
- 此时手机上会弹出USB的用处弹框,咱们抉择传输文件(MTP)即可,如图所示:
- 在电脑 CMD 中执行
adb devices
命令,看是否能找到本人的手机,比方下图所示就是胜利的后果了
- 在下面步骤中你可能呈现找不到手机的状况,通常这种状况是驱动问题,这里介绍一种简略的解决形式:下载一个驱动精灵,装置启动之后点击驱动治理,之后装置相应驱动即可解决,如图所示:
通过下面的一系列操作,咱们曾经解决好了真机环境了。
Appium 的环境本文就不说了,如果不分明的话,能够看一下:Python + Appium 自动化操作微信入门。
3. 实现
上面咱们开始手动敲代码,如果对 Appium 根本代码操作不理解的话,还是能够去看一下我之前写的这篇:Python + Appium 自动化操作微信入门。
首先看一下相应参数配置,代码实现如下:
desired_caps = { "platformName": "Android", # 零碎 "platformVersion": "8.0.0", # 零碎本号 "deviceName": "m5s", # 设施名 "appPackage": "com.tencent.mm", # 包名 "appActivity": ".ui.LauncherUI", # app 启动时主 Activity 'unicodeKeyboard': True, # 应用自带输入法 'noReset': True # 保留 session 信息,能够防止从新登录 }
接着看一下如何获取微信通讯录名字(备注)列表?代码实现如下:
# 获取通讯录列表 def get_address_list(): driver.find_elements_by_id('com.tencent.mm:id/cn_')[1].click() # 获取昵称(备注) address_list = driver.find_elements_by_id('com.tencent.mm:id/dy5') remarks = [] for address in address_list: remark = address.get_attribute("content-desc") # 排除本人和微信官网号 if remark != "本人的微信名" and "微信" not in remark: remarks.append(remark) return remarks
取到了微信通讯录列表之后,咱们就能够对其进行遍历检测了,上面看一下如何实现检测本人的微信是否被删,代码实现如下:
# 判断是否被删 def is_delete(remark, count): if count == "1": time.sleep(2) print('点击微信搜寻框') driver.find_element_by_id('com.tencent.mm:id/cn1').click() time.sleep(2) print('在搜寻框输出搜寻信息') driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(remark) time.sleep(2) print('点击搜寻到的好友') driver.find_element_by_id('com.tencent.mm:id/tm').click() time.sleep(2) # 转账 driver.find_element_by_id('com.tencent.mm:id/aks').click() time.sleep(2) driver.find_elements_by_id('com.tencent.mm:id/pa')[5].click() time.sleep(2) driver.find_element_by_id('com.tencent.mm:id/cx_').click() time.sleep(2) driver.find_element_by_id('com.tencent.mm:id/cxi').click() time.sleep(5) # 判断是否被删 is_exist = is_element_exist('com.tencent.mm:id/jh') if is_exist is True: return remark else: return False
上述办法中,如果检测到是删了本人微信的人就返回那个人的微信名(备注),而后咱们将这些人记录起来;如果检测到不是删除本人微信的人就返回 False。
上述过程执行完了之后,咱们就能够获取到所有删了本人微信的人了,接下来咱们就能够将这些人都从本人微信通讯录中删除了,删除实现的代码如下:
# 删除把本人删除的人 def del_person(nicks): for inx, val in enumerate(nicks): time.sleep(2) if inx == 0: print('在搜寻框输出搜寻信息') driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(val) else: time.sleep(2) print('点击微信搜寻框') driver.find_element_by_id('com.tencent.mm:id/cn1').click() print('在搜寻框输出搜寻信息') time.sleep(1) driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(val) time.sleep(2) print('点击搜寻到的人') driver.find_element_by_id('com.tencent.mm:id/tm').click() time.sleep(2) print('点击聊天对话框右上角...') driver.find_element_by_id('com.tencent.mm:id/cj').click() time.sleep(2) print('点击头像') driver.find_element_by_id('com.tencent.mm:id/f3y').click() time.sleep(2) print('点击联系人右上角...') driver.find_element_by_id('com.tencent.mm:id/cj').click() time.sleep(2) print('点击删除按钮') driver.find_element_by_id('com.tencent.mm:id/g6f').click() time.sleep(2) print('点击弹出框中的删除') driver.find_element_by_id('com.tencent.mm:id/doz').click()
至此,咱们就利用 Python + Appium 实现了自动化找出微信中删除本人的人并将其删除的工作了。
源码在公号 Python小二 后盾回复 201108 获取。