contacts)

{

try

{

File file = new File(output_path);

//删除之前保存的文件

if (file.exists())

{

file.delete();

}

BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));

// 添加头部名称

bw.write("userName" + "," + "alias" + "," + "nickName");

bw.newLine();

for (int i = 0; i

第 2 步,我们需要模拟给好友转账,来判断这个好友关系是否正常。

首先,我们需要初始化 Airtest,然后利用 adb 把第 1 步生成的数据从手机里导出到本地。def __init_airtest(self):

"""

初始化Airtest

:return:

"""

device_1 = Android('822QEDTL225T7')

# device_1 = Android('emulator-5554')

connect_device("android:///")

self.poco = AndroidUiautomationPoco(device_1, screenshot_each_action=False)

auto_setup(__file__)

def export_wx_db_from_phone(target_path):

"""

从手机中导出通信录数据

:param target_path:

:return:

"""

# 微信通信录数据

wx_db_source_path = "/data/data/com.xingag.crack_wx/wx_data.csv"

# 导出到本地

os.popen('adb pull %s %s' % (wx_db_source_path, target_path))

然后就是一系列自动化操作。

打开微信,遍历好友列表,拿到每一个好友的微信号去搜索好友,跳转到好友的聊天界面。def __to_friend_chat_page(self, weixin_id):

"""

点击到一个好友的聊天界面

:param weixin_id:

:param weixin_name:

:return:

"""

# 1、点击搜索

element_search = self.__wait_for_element_exists(self.id_search)

element_search.click()

print('点击搜索')

# 2、搜索框

element_search_input = self.__wait_for_element_exists(self.id_search_input)

element_search_input.set_text(weixin_id)

# 3、搜索列表

element_search_result_list = self.__wait_for_element_exists(self.id_search_result_list)

# 3.1 是否存在对应的联系人,如果存在就在第一个子View布局下

# 注意:可能出现最常用的聊天列表,这里需要进行判断

index_tips = 0

for index, element_search_result in enumerate(element_search_result_list.children()):

# 联系人的Tips

# if element_search_result_list.children()[0].offspring(self.id_contact_tips).exists():

if element_search_result.offspring(text=self.text_contact_tips).exists():

index_tips = index

break

# 4、点击第一个联系人进入聊天界面

element_search_result_list.children()[index_tips + 1].click()

接着尝试着给对方转账,如果好友关系正常,就会跳出一个支付页面让输入密码。def __judge_is_friend(self, weixin_id, weixin_name):

"""

判断是不是微信好友

:param weixin_id: 微信号

:return:

"""

# 尝试给好友转账,设置一个小额度,以防止刷脸直接支付了

# 如果对方是你的好友,接下来会让你输入密码,关掉页面就行了

# 如果对方不是你的好友,会提示不是你的好友,不能继续操作了

# 5、点击好友界面的+按钮

self.poco(self.id_chat_more_button).click()

# 6、点击转账按钮

self.poco(self.id_chat_more_container).offspring(text=self.text_chat_transfer_account_text).click()

# 7、输入金额

self.poco(self.id_transfer_account_input).set_text(self.money)

# 8、点击转账按钮

self.poco(self.id_transfer_account_container).offspring(text=self.text_chat_transfer_account_text).click()

如果是僵尸粉,应用会弹出一个警告对话框,提示你不是收款方好友,没法完成转账的操作。

通过警告对话框是否存在,就可以判断好友关系是否正常。非正常的好友关系,包含:僵尸粉、对方账号异常等。# 10.弹出警告对话框

# 弹出好友关系不正常

if element_transfer_account_result_button:

# 提示内容

ransfer_account_result_tips = self.poco(self.id_transfer_account_result_tips).get_text()

if self.text_friend_no_tips in transfer_account_result_tips:

print('注意!%s已经把你拉黑了!!!' % weixin_name)

self.friend_black_list.append({

'id': weixin_id,

'nickName': weixin_name

})

write_to_file(self.path_black_list, 'id:%s,nickName:%s' % (weixin_id, weixin_name))

elif self.text_friend_limit_tips in transfer_account_result_tips:

print('%s账号收到限制!!!' % weixin_name)

write_to_file(self.path_account_limit, 'id:%s,nickName:%s' % (weixin_id, weixin_name))

elif self.text_friend_is_norm in transfer_account_result_tips:

print('%s好友关系不正常!!!' % weixin_name)

write_to_file(self.path_relationship_unnormal, 'id:%s,nickName:%s' % (weixin_id, weixin_name))

# 点击确认按钮

element_transfer_account_result_button.click()

# 返回到主页面

self.__back_to_home()

else:

# 包含正常好友关系和对方账号限制的情况

print('好友关系正常')

self.__back_to_home()

最后,模拟点击手机的返回键,一直回退到微信主界面。

def __back_to_home(self):

"""

回退到主界面

:return:

"""

print('准备回退到主界面')

home_tips = ['微信', '通讯录', '发现', '我']

while True:

keyevent('BACK')

is_home = False

# 判断是否到达首页

if self.poco(text=home_tips[0]).exists() and self.poco(text=home_tips[1]).exists() and self.poco(

text=home_tips[2]).exists() and self.poco(text=home_tips[3]).exists():

is_home = True

if is_home:

print('已经回到微信首页~')

break

循环上面的操作,就可以判断出哪些是僵尸粉,哪些好友的账号被限制,哪些是正常的好友关系。

第 3 步,删除上面获取到的僵尸粉列表。

拿到上面的僵尸粉数据列表,就可以利用上面的方式进行一系列自动化UI 操作,删除掉这些好友。def del_friend_black(self, weixin_id):

"""

删除黑名单好友

:return:

"""

# 到好友聊天界面

self.__to_friend_chat_page(weixin_id)

# 点击聊天界面右上角,进入到好友的详细信息界面

self.poco(self.id_person_msg_button).click()

# 点击好友头像

self.poco(self.id_person_head_url).click()

# 点击个人名片的右上角,弹出好友操作菜单

self.poco(self.id_person_manage_menu).click()

# 查找删除操作栏

# 注意:对于目前主流的手机,都需要滑动到最底部才能出现【删除】这一操作栏

self.poco.swipe([0.5, 0.9], [0.5, 0.3], duration=0.2)

# 点击删除,弹出删除对话框

self.poco(self.id_person_del, text=self.text_person_del).click()

# 确定删除好友【确定删除】

# 界面会直接回到主界面

self.poco(self.id_person_del_sure, text=self.text_person_del).click()

四 .结 论

编译 Android 项目或者直接运行 APK 就能将微信通信录的好友数据保存到项目文件目录下。

然后运行 Python 程序会遍历通讯录好友数据,自动化去操作微信 App,接着将所有的僵尸粉写入到本地文件中,最后可以选择将这些僵尸粉全部删除掉。

想试试你的微信好友通讯录有僵尸粉不,试一下呀!?更多的Python学习教程和一些小技巧会不定期为大家更新。大家可以用期待一下下呀!

python微信库有哪些_谁偷偷删了你的微信?别慌!一篇Python学习教程帮你都揪出来...相关推荐

  1. python remi库官网_诺禾致源2020:诺禾分享:python的Remi库

    说明: ===== 1.1 如果不会web前端的html.JavaScript.CSS的知识怎么办?无所不能的python可以做到. 1.2 Remi是一个用于Python应用程序的GUI库,它将应用 ...

  2. 不属于python标准库的是_《Python Cookbook(第2版)中文版》——1.10 过滤字符串中不属于指定集合的字符-阿里云开发者社区...

    本节书摘来自异步社区<Python Cookbook(第2版)中文版>一书中的第1章,第1.10节,作者[美]Alex Martelli , Anna Martelli Ravenscro ...

  3. 谁偷偷删了你的微信?别慌!Python 帮你都揪出来了!

    1 目 标 场 景 不知道你有没有经历过,想联系一位很长时间没有联系的朋友,发现对方很早以前已经把你删除了,而你还一无所知. Python资源共享群:484031800 相信每个人的微信通信录里都存在 ...

  4. 谁偷偷删了你的微信?别慌!Python 帮你都揪出来了

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  5. 谁偷偷删了你的微信?别慌!Python帮你都揪出来了

    作者 | 星安果 来源 | AirPython(ID:AirPython) 01 目标场景 不知道你有没有经历过,想联系一位很长时间没有联系的朋友,发现对方很早以前已经把你删除了,而你还一无所知. 相 ...

  6. python扩展库导入方式_使用pip安装Python扩展库的方法

    本文节选自作者的<Python编程基础及应用>视频教程.Python编程基础及应用_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 使用pip进行安装 ...

  7. python的库在哪_你知道python常见的库有哪些吗?五大python库

    大家都知道,现在python是一门非常不错的编程,各行各业都开始使用python进行编程,而且python每个功能模块,都有对应的python库,那么你知道python常见的库有哪些吗?今天为大家介绍 ...

  8. python升级第三方库,Python第三方库的卸载_安装_更新

    1.库类型 1.import time #标准库 2.from 模块 import 方法 #自定义的库 3.import selenium #第三方库 2.标准库 1.加载操作系统模块 import ...

  9. python 的库如何开发_一篇文章入门Python生态系统

    译者按:原文写于2011年末,虽然文中关于Python 3的一些说法可以说已经不成立了,但是作为一篇面向从其他语言转型到Python的程序员来说,本文对Python的生态系统还是做了较为全面的介绍.文 ...

最新文章

  1. addroutes刷新_vue 解决addRoutes动态添加路由后刷新失效问题
  2. 总结ISO各层协议都有哪些
  3. 算法----删除链表中的节点(Java)
  4. 前端div里的内容下沉_自学Web前端的五个不同阶段,从浅入深
  5. 第二阶段 站立会议 02
  6. 最简单的基于FFmpeg的AVDevice例子(读取摄像头)
  7. Linux poll
  8. pthread_cond_signal函数《代码》--生产者与消费者
  9. 跟风写博---也谈值类型和引用类型
  10. 浅谈ES6中的rest参数
  11. SQL Server索引超出了数组界限解决方法
  12. mac下打开.mpp后缀文件的工具OmniPlan
  13. QPS,TPS,RT是什么?
  14. 开源数据库全接触-MongoDB,Cassandra,Hypertable,CouchDB,Redis,HBase,Voldemort等35款数据库简介
  15. python根据四点坐标截取图片
  16. iOS最全打包IPA教程
  17. 【排序算法】图解直接插入排序(图解堪比Debug显示每次循环结果)
  18. impdp 导入报错
  19. 数据分析七种降维方法
  20. 智慧能源三大应用场景

热门文章

  1. 每个用户连续登录天数
  2. AutoMapper的源码分析
  3. 前端配置反向代理proxyTable
  4. 我的世界服务器自建主城,为纪念去世的服务器创建人,《我的世界》玩家们竖起了告示牌...
  5. oracle看起来很简单一用就不会的同列乘积函数
  6. 趣味分析系列 | 女生罩杯型号知多少
  7. JsRender 点滴
  8. 巧用api提升钣金设计装配 3 - 钣金样式和折弯规则
  9. 为什么说路由器的“孕妇模式”更加伤害孕妇?
  10. 7月27号王者荣耀进服务器未响应,王者荣耀体验服7月27日更新公告 修复普通攻击BUG...