Python+Appium实现删除微信“僵尸好友”

话不多说,本文旨在功能使用,不讲解原理!!!
本文所需环境配置:
win10
JDK1.8
Python 3.6.8
Appium 1.15.1
android-sdk
文件获取:https://pan.baidu.com/s/1jd60QGI68VZB-pRhBCcAwQ
提取码:6f49

1.首先配置jdk(安装jdk基本就下一步下一步,自行百度):计算机(右键)->属性->高级系统设置->高级->环境变量->新建环境变量(系统变量) JAVA_HOME,如图所示:
在这里插入图片描述
系统变量->找到 Path 变量->编辑->在变量值的末尾添加;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;如下:
在这里插入图片描述

新建 CLASSPATH 变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar。如下:

在这里插入图片描述

2.配置android-sdk
与 JDK 配置类似,新建环境变量 ANDROID_HOME,变量值为 android-sdk 位置,如下:
在这里插入图片描述

在 Path 变量值的末尾添加 ;%ANDROID_HOME%\tools;%ANDROID_HOME%\build-tools\30.0.0-preview;%ANDROID_HOME%\platform-tools

在这里插入图片描述

3.安装Appium
安装 Python 库:pip install appium-python-client(python的pip库管理)
Appium 安装完成启动后(安装过程很简单),点击编辑配置,配置 JDK 和 android-sdk,如图所示:

在这里插入图片描述
启动服务器,效果为:
在这里插入图片描述

到目前为止,准备工作就差不多了。
查看对方是否是自己的“僵尸好友”,可以通过群发消息来验证,但这样又会打扰正常好友,不妥不妥,除此之外,还可以通过转账来验证!!!

正常好友:
在这里插入图片描述

但如果是僵尸…

在这里插入图片描述
编程基本思路如下:
1.获取微信通讯录中所有的联系人名字(备注)并记录
2.遍历所有联系人,都进行转账操作,根据上面的信息筛选好友,将“僵尸好友”选出并记录
3.删除“僵尸好友”

首先需要打开手机的USB调试功能,编者使用的是小米手机,操作步骤为:
设置->我的设备->全部参数->MIUI版本(多次点击,开启开发者模式)->返回设置列表->更多设置->开发者选项->开启开发者选项并分别开启:USB调试、USB安装、USB调试(安全设置)选项,如图所示:
在这里插入图片描述
连接手机后选择:
在这里插入图片描述

然后在电脑 CMD 中执行 adb devices 命令,看是否能找到自己的手机,如下:
在这里插入图片描述

最后上代码:

import time
from appium import webdriver

# 判断元素是否存在
def is_element_exist(element, timeout=3):
    count = 0
    while count < timeout:
        souce = driver.page_source
        if element in souce:
            return True
        else:
            count += 1
            time.sleep(1)
    return False
# 基本配置信息
desired_caps = {
    "platformName": "Android",  # 系统
    "platformVersion": "10.0.0",  # 系统版本号  注意修改为自己的版本号
    "deviceName": "m8ss",  # 设备名
    "appPackage": "com.tencent.mm",  # 包名
    "appActivity": ".ui.LauncherUI",  # app 启动时主 Activity
    'unicodeKeyboard': True,  # 使用自带输入法
    'noReset': True  # 保留 session 信息,可以避免重新登录
}

# 上拉方法
def swipe_up(distance, time):  # distance为滑动距离,time为滑动时间
    width = 1080
    height = 1920  # width 和 height根据不同手机而定
    driver.swipe(1 / 2 * width, 9 / 10 * height, 1 / 2 * width, (9 / 10 - distance) * height, time)


# 获取通讯录列表
def get_address_list(flag):
    if flag == True:
        driver.find_elements_by_id('com.tencent.mm:id/cn_')[1].click()
        # time.sleep(0.1)
        # 上滑  时间越短,划得屏幕越大
        swipe_up(1 / 2, 1500)
    else:
        swipe_up(5 / 6, 1500)
    # time.sleep(0.1)
    # 获取昵称(备注)
    address_list = driver.find_elements_by_id('com.tencent.mm:id/dy5')
    remarks = []
    for address in address_list:
        remark = address.get_attribute("content-desc")
        # 排除自己和微信官方号   注意将appium改成自己的微信名
        if remark != "appium" and  ("微信团队" not in remark )and ("文件传输助手" not in remark ):
            remarks.append(remark)
    return remarks

# 判断是否被删
def is_delete(remark, count):
    if count == "1":
        time.sleep(0.2)
        print('点击微信搜索框')
        driver.find_element_by_id('com.tencent.mm:id/cn1').click()
    time.sleep(1)
    print('在搜索框输入搜索信息')
    driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(remark)
    time.sleep(1)
    print('点击搜索到的好友')
    driver.find_element_by_id('com.tencent.mm:id/tm').click()
    time.sleep(0.1)
    # 转账
    driver.find_element_by_id('com.tencent.mm:id/aks').click()
    time.sleep(0.1)
    driver.find_elements_by_id('com.tencent.mm:id/pa')[5].click()
    time.sleep(0.1)
    driver.find_element_by_id('com.tencent.mm:id/cx_').click()
    time.sleep(0.1)
    driver.find_element_by_id('com.tencent.mm:id/cxi').click()
    time.sleep(0.1)
    # 判断是否被删
    is_exist = is_element_exist('com.tencent.mm:id/jh')
    if is_exist is True:
        return remark
    else:
        return False

# 返回搜索框
def search_back():
    time.sleep(0.1)
    driver.find_element_by_id('com.tencent.mm:id/dn').click()
    time.sleep(0.1)
    driver.find_element_by_id('com.tencent.mm:id/rs').click()
    time.sleep(0.1)
    # 清除搜索框,输入下一个
    driver.find_element_by_id('com.tencent.mm:id/fsv').click()

# 删除把自己删除的人
def del_person(nicks):
    print('点击微信搜索框')
    driver.find_element_by_id('com.tencent.mm:id/cn1').click()
    for inx, val in enumerate(nicks):
        time.sleep(0.5)
        if inx == 0:
            print('在搜索框输入搜索信息')
            driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(val)
        else:
            time.sleep(1)
            print('点击微信搜索框')
            driver.find_element_by_id('com.tencent.mm:id/cn1').click()
            print('在搜索框输入搜索信息')
            time.sleep(0.5)
            driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(val)
        time.sleep(0.5)
        print('点击搜索到的人')
        driver.find_element_by_id('com.tencent.mm:id/tm').click()
        time.sleep(0.5)
        print('点击聊天对话框右上角...')
        driver.find_element_by_id('com.tencent.mm:id/cj').click()
        time.sleep(1)
        print('点击头像')
        driver.find_element_by_id('com.tencent.mm:id/f3y').click()
        time.sleep(1)
        print('点击联系人右上角...')
        driver.find_element_by_id('com.tencent.mm:id/cj').click()
        time.sleep(1)
        print('点击删除按钮')
        driver.find_element_by_id('com.tencent.mm:id/g6f').click()
        time.sleep(1)
        print('点击弹出框中的删除')
        driver.find_element_by_id('com.tencent.mm:id/doz').click()

if __name__ == '__main__':
    remarks = []
    driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
    # 打开微信需要时间
    time.sleep(5)
    remarks1 = get_address_list(True)
    remarks.extend(remarks1)
    while True:
        # 是否到了通讯录末尾
        is_end = is_element_exist('com.tencent.mm:id/azb')
        # time.sleep(0.2)
        remarks2 = get_address_list(False)
        remarks.extend(remarks2)
        if is_end == True:
            break
    remarks = set(remarks)
    print("通讯录昵称列表:", remarks)
    time.sleep(1)
    dels = []
    for inx, val in enumerate(remarks):
        rt = ""
        if inx == 0:
            rt = is_delete(val, "1")
        else:
            rt = is_delete(val, "")
        if rt is False:
            # 返回搜索框
            driver.keyevent(4)
            search_back()
        # 被删除
        else:
            dels.append(rt)
            time.sleep(0.2)
            driver.find_element_by_id('com.tencent.mm:id/doz').click()
            search_back()
    print("删除我的人:", dels)
    # 删除删了自己的人
    del_person(dels)

做好上面的准备工作,连上手机(提前打开应用锁啥的,能点开微信进入微信界面就行),运行程序就行了!

ok,收工!!!
最后再啰嗦两句,这个代码实际上就是模拟人手动转账删除的操作,没啥技巧性,所以代码中间有很多sleep的地方,就是让手机反映一下,说白了,你手机越牛逼,反映越快,那你可以把那个时间调小点,反之就调大点。

就这样,over!!!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值