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 获取。

我用 Python 找出了删除我微信的所有人并将他们自动化删除了的更多相关文章

  1. Linux/Unix 怎样找出并删除某一时间点的文件(转)

    在Linux/Unix系统中,我们的应用每天会产生日志文件,每天也会备份应用程序和数据库,日志文件和备份文件长时间积累会占用大量的存储空间,而有些日志和备份文件是不需要长时间保留的,一般保留7天内的文 ...

  2. 使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页

    使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页 方法1:linux下使用awk命令 # cat access1.log | awk '{print $1" &q ...

  3. Linux/Unix 怎样找出并删除某一时间点的文件

    Linux/Unix 怎样找出并删除某一时间点的文件 在Linux/Unix系统中,我们的应用每天会产生日志文件,每天也会备份应用程序和数据库,日志文件和备份文件长时间积累会占用大量的存储空间,而有些 ...

  4. Python找出列表中的最大数和最小数

    Python找出列表中数字的最大值和最小值 思路: 先使用冒泡排序将列表中的数字从小到大依次排序 取出数组首元素和尾元素 运行结果: 源代码: 1 ''' 2 4.编写函数,功能:找出多个数中的最大值 ...

  5. python找出数组中第二大的数

    #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:找出数组中第2大的数字 ''' def find_Second_large_ ...

  6. python 找出字符串中出现次数最多的字母

    # 请大家找出s=”aabbccddxxxxffff”中 出现次数最多的字母 # 第一种方法,字典方式: s="aabbccddxxxxffff" count ={} for i ...

  7. python找出字典中value最大值的几种方法

    假设定义一字典,m = {"a":3,"e":6,"b":2,"g":7,"f":7,"c ...

  8. python 找出一篇文章中出现次数最多的10个单词

    #!/usr/bin/python #Filename: readlinepy.py import sys,re urldir=r"C:\python27\a.txt" disto ...

  9. Leetcode刷题笔记(Python 找出所有相加之和为n的k个组合,组合中只允许含有1-9的正整数,并且每种组合中不存在重复的数字。)

    eg:输入:k=3,n=9 输出: [[1,2,6],[1,3,5],[2,3,4]] 输入:k=2,n=5 输出:[[1,4][2,3]] #!/usr/bin/env python # -*- c ...

随机推荐

  1. (入门)matlab中创建和调用m文件

    大学学过的一款软件,说实话没好好学,老师直接讲到高深的做仿真之类的 综合网上的教程讲述基础的matlab创建遇到的问题: 参考: 1. https://blog.csdn.net/weixin_423 ...

  2. JavaScript 将十进制数转换成格式类似于 0x000100 或 #000100 的十六进制数

    将十进制数转换成格式类似于 0x000100 或 #000100 的十六进制数 1 <!DOCTYPE html> 2 <html> 3 <head> 4 < ...

  3. vue中,使用 es6的 ` 符号给字符串之间换行

    我这里分功能是点击"复制范围",就相当于复制图上的坐标点一样的数据和格式: "复制功能"的代码如下: copyPoints() { const vm = thi ...

  4. 虚拟主机和ECS的选择——有的坑你可以不躺,有的钱你可以不花(一)

    一直想做网站,由于最开始虚拟主机有优惠,所以三年前买了虚拟主机,后来一直续费,间歇性使用过,发现很多功能都不行​. 昨天准备买新的,然后想起学生购买有优惠,于是开始了学生认证之旅​. 首先,看一下之前 ...

  5. 判断移动还是PC 以及微信环境

    //判断pc还是移动端 function IsPC() {   var userAgentInfo = navigator.userAgent;   var Agents = ["Andro ...

  6. go函数可见性

    可见性 可见性,包内任何变量或函数都是能访问的.包外的话,首字母大写是可导出的,能够被其他包访问或者调用,小写表示是私有的,不能被外部包访问或调用

  7. go 结构体与方法

    go 结构体与方法   go 结构体相当于 python 中类的概念,结构体用来定义复杂的数据结构,存储很多相同的字段属性 结构体的定义 1.结构体的定义以及简单实用 package main imp ...

  8. 第一章 Linux操作系统及其历史介绍

    一.什么是操作系统 1.基本含义: 简称OS 是计算机系统中必不可少的基础系统软件,是应用程序运行和用户操作必备的基础环境 操作系统就是一个人与计算机之间的中介 2.组成方式: 操作系统的组成: 计算 ...

  9. 【Azure微服务 Service Fabric 】在SF节点中开启Performance Monitor及设置抓取进程的方式

    前提条件 当我们观察到SF中某一个节点出现CPU不正常的情况,但是由于不能肉眼长期观察,所以可以通过开启Performance Monitor的方式来获取每一个进程的%Processer Time的方 ...

  10. C# indexof和indexofany区别(转)

    定位子串是指在一个字符串中寻找其中包含的子串或者某个字符.在String类中,常用的定位子串和字符的方法包括IndexOf/LastIndexOf及IndexOfAny/LastIndexOfAny, ...