0 引言

提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一个前提条件:手机需要root,对于苹果手机的话就需要越狱了。现在的手机想要root或越狱并不容易,同时这会对手机安全性带来一些风险,抢红包本身只是个娱乐活动,这样做就得不偿失了。

为了自动抢红包,python能帮我们实现吗?

答案是肯定的,本文就带大家一起探索下用Python如何实现自动抢红包。

1 环境

操作系统:Windows

Python版本:3.7.2

手机系统:Android

2 需求分析

这里我们的需求是实现自动抢红包。首先要打开微信,进入到指定的群聊,识别微信红包、执行抢红包的动作。这就是关键的步骤,简单清晰。

因为电脑版本的微信没有抢红包的功能,我们只能手机微信,那么就需要把手机连上电脑,通过电脑控制手机来自动抢,那就需要确保「adb」命令可正常执行。

识别微信中的消息,是红包还是普通的信息,这里我们通过聊天消息的元素标识来判断。这里我们借助了「Airtest IDE」工具来实现。

3 前置准备

3.1 打开手机的USB调试

要正常使用「adb」需要打开USB调试,设置项通常出现在手机系统设置中的[开发人员选项]里面。

在手机上打开USB调试后,接下来我们通过Airttest IDE验证 adb 运行是否正常。

3.2 下载安装Airtest IDE

开始之前先,先解释下airttest相关概念:

Airtest 是一个跨平台的、基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS。

Poco是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用。

AirtestIDE 是一个我们配套推出的跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写脚本。

Airtest IDE 的下载地址:http://airtest.netease.com/

下载之后,解压打开就可以使用,Airtest IDE的界面如下:

使用AirtestIDE对Android应用进行自动化操作,第一步就需要连接Android设备。

请使用USB线连接手机,手机上出现的 允许USB调试 弹窗,点击 确定。

点击连接面板中的 refresh ADB 按钮,设备列表将会刷新。

点击列表内对应设备的 Connect 完成连接。

若设备未刷出,点击 refresh ADB 按钮。

若连接遇到问题,请参考Airtest的官方教程:Android真机连接

4 抢红包流程回顾

打开微信,在最左侧的Tab页,微信消息列表,我们需要从这里选择指定的群聊来抢红包。

在AirtestIDE中,我们可以通过暂停功能,冻结当前的UI树形结构来精确地检视UI控件,我们先来分析下这个页面中元素标识。

▲聊天页面中整体的群聊消息的元素标识 com.tencent.mm:id/d1v

▲聊天页面中单个群聊消息的元素标识 com.tencent.mm:id/b6e

接下来进入我们准备要抢红包的群聊中,识别出红包并执行抢红包的动作。

我们先来看看红包的标识:

▲红包标识的示例1 com.tencent.mm:id/aql

▲红包标识的示例2 com.tencent.mm:id/aql

点击红包,记录下弹出的大红包页面中“开”的元素标识

▲大红包页面中”开“的标识 com.tencent.mm:id/d02

这里我们需要判断是红包是否有效,比如已被领完或是已被自己领取的红包就是无效的,我们在执行时可以跳过这些。

▲已领取红包的标识 com.tencent.mm:id/apk

▲已被领完红包的标识 com.tencent.mm:id/apk

我们用的各元素的标识都已取到,接下来就是组织我们的代码。

5 代码梳理

首先得打开微信,利用Airtest启动app应用,只须一行代码即可搞定,如下

# 打开手机微信

poco(text='微信').click()

获取当前页面中所有所有群聊的名称

# 群聊消息的元素标识

Chat_msg = poco(name='com.tencent.mm:id/d1v').offspring('com.tencent.mm:id/b6e')

# 获取当前页面中所有群聊的名称

Chat_names = []

Chat_names = list(map(lambda x: x.get_text(), Chat_msg))

选择并进入指定的群聊

# 指定抢红包的群聊名称

chat = input('请指定群聊名称:')

if chat in Chat_names:

index = Chat_names.index(chat)

# 点击进入指定的群聊

Chat_msg[index].click()

在微信聊天页面中,获取当前页面中的所有消息元素。

msg_list = poco("android.widget.ListView").children()

遍历消息并查找红包

for msg in msg_list:

# 微信红包的标识

LuckyMoney = msg.offspring('com.tencent.mm:id/aql')

# 已失效红包(比如已领取、已被领完)的标识

Invalid = msg.offspring('com.tencent.mm:id/aqk')

# 判断红包是否有效并抢起来!

if LuckyMoney:

pass

在LuckyMoney中定义抢红包的动作

if Invalid.exists() and (Invalid.get_text()=='已领取' or Invalid.get_text()=='已被领完'):

print(f'红包已无效,跳过……')

continue

else:

print(f'发现一个新红包,抢起来!')

poco("com.tencent.mm:id/d1v")

msg.click()

click_open = poco("com.tencent.mm:id/d02")

if click_open.exists():

click_open.click()

keyevent('BACK')

6 后记

若我们在一台电脑上并不想安装Airtest IDE,还能执行这个脚本吗?

当然可以,只需要安装好「pocoui」这个第三方库就可以“抛弃”它了!

pip install pocoui

利用 AirtestIDE 创建一个项目时,设备类型选中 Android,就会在编码区生成一段初始化的代码。

from airtest.core.api import *

auto_setup(__file__)

from poco.drivers.android.uiautomation import AndroidUiautomationPoco

poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

我们自己编写的Python代码中也需要加上这段初始化的代码。

再次强调,在执行脚本时要确保手机连上电脑,并确保「adb」命令正常运行。

python微信抢红包神器_Python自动抢红包教程详解相关推荐

  1. python微信抢红包神器_Python自动抢红包,超详细教程,再也不会错过微信红包了...

    0 引言 提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一个前提条件:手机需要root,对于苹果手机的话就需要越狱了.现在的手机想要root或越狱并不容易,同 ...

  2. python 微信红包群_Python自动抢红包,超详细教程,再也不会错过微信红包了!...

    目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言 提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一 ...

  3. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  4. python做插件应用_Python插件机制实现详解

    插件机制是代码/功能反向依赖注入到主体程序的一种方法,编译型语言通过动态加载动态库实现插件.对于Python这样的脚本语言,实现插件机制更简单. 机制 Python的__import__方法可以动态地 ...

  5. python加载机制_Python插件机制实现详解

    插件机制是代码/功能反向依赖注入到主体程序的一种方法,编译型语言通过动态加载动态库实现插件.对于Python这样的脚本语言,实现插件机制更简单. 机制 Python的__import__方法可以动态地 ...

  6. python count函数代码_python count函数用法详解_后端开发

    fgetc函数的作用详解_后端开发 fgetc函数的作用是从指定文件读入一个字符,要求文件的打开方式必须是以读或读写的方式或者追加的方 式,只写方式是不能读的. 在python中可以使用"c ...

  7. python字典的用法_Python字典的用法详解(附示例)

    本篇文章给大家带来的内容是关于Python字典的用法详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 字典的表现形式为:{key:value},键和值之间用冒号分隔,每个 ...

  8. python lambda函数加法_python lambda的使用详解

    1. lambda语法 lambda argument_list: expression lambda是Python预留的关键字,argument_list(参数列表)和expression(关于参数 ...

  9. python编程序列类型_python序列类型种类详解

    python序列类型包括哪三种 python序列类型包括:列表.元组.字典 列表:有序可变序列 创建:userlist = [1,2,3,4,5,6] 修改:userlist[5] = 999 添加: ...

最新文章

  1. vue-admin项目启动踩过的坑
  2. Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:
  3. [转帖]迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比
  4. 浏览器滚动条样式更改
  5. 刀片 显卡 排行_AMD发布RadeonRX6000系列游戏显卡 4599元起
  6. 榴莲肉多到流出来!引爆全国吃货的榴莲千层终于杀到来!100%好评
  7. 踩过坑才懂:如何快速打造技术产品
  8. java excel 冻结_Java 冻结或解除冻结Excel中的行和列
  9. 【科目一】你必须知道的驾考交通标志大全
  10. 第五---七章 交换机和路由器的基本配置
  11. Chimaera:用区块链游戏思维将《玩家一号》的“绿洲”变为现实;网易有道将推语音助手及智能音箱
  12. 《C专家编程》学习总结2
  13. 如何安装Python?
  14. 双机热备与负载均衡区别
  15. cv.threshold()浅谈
  16. React Native 调研报告
  17. Python数据处理中关于离散变量的处理——因子化、One-Hot、哑变量
  18. mysql8笔记本蓝屏,开机显示0x0000007b蓝屏bios设置
  19. webstorm破解方法(2018.3.2 64x版本)
  20. 【C++之重载函数】数据排序

热门文章

  1. DisGeNET的初步认识
  2. java算术运算符乘方_用java编写计算器 能够实现简单的加、减、乘、除、乘方、开方运算等;...
  3. 防火墙(NGFW)与UTM本质上的区别
  4. [JZOJ5629]【NOI2018模拟4.4】Map
  5. Python同过百度翻译制作翻译程序
  6. HTTP/3 强势来袭?!
  7. 计算机硬盘坏的原因,硬盘损坏的原因有哪些 硬盘正确使用方法介绍
  8. 应该了解的世界思想名著
  9. Python Web开发:Django+BootStrap实现简单的博客项目
  10. opencv位运算,cv2.bitwise_and,cv2.bitwise_or,cv2.bitwise_not,cv2.bitwise_xor