80行Python代码制作微信抢红包程序,运气王属于有技术的人

论坛 期权论坛 期权     
编程学习营   2019-6-29 18:55   3951   0
每逢过年过节,大家都会在微信群里联系祝福自己的亲朋好友,有时候还会在群里发红包,让大家去抢,其实并没有多少人在乎红包里那点钱,主要还是为了烘托气氛,图个彩头。但是气氛归气氛,要是每次总是抢到最小的红包,或者显示红包已经抢光了,难免有点心情不愉快。
普通人遇到这种就只能怪手气不好或者手速慢了,但是我们是程序员啊,我们就是吃这门技术饭的,况且我们还会号称除了生孩子之外,无所不能的Python啊!



一说到抢红包,不得不说一个框架,它的名字叫做Xposed,这个框架可以说是专门为抢红包而生的!但是这个框架有个很难受的一点,如果想要运行它,那么手机需要root,这个就需要你越狱了!
如果你的手机是安卓,那么越狱应该还是可以实现的,如果是苹果的话,可能就没有那么容易实现了。



好了,不多说废话了,直接开始我们的实战吧!
我这里有一套Python编程入门教程,由于文章里不能发资料文件,所以我把资料整理在Python编程学习群:808713721里面,大家扫描下面图片中的二维码加群就可以免费领取这套教程了


1 环境
操作系统:Windows
Python版本:3.7.2
手机系统:Android
2 需求分析
需求就是自动抢红包,打开手机微信,然后找到要抢红包的群,识别群里的红包,然后再执行抢红包的动作。
这里需要注意的是如何识别群里的消息是普通的消息还是红包消息,这里可以通过微信聊天的元素标识来判断,这里是使用了一款名叫Airtest IDE的工具来实现!
3:前置准备
3.1 打开手机的USB调试
因为要电脑连接到手机,所以需要使用一款叫做adb工具,它是安卓的调试桥梁。
打开手机的USB调试功能,然后设置开发人员选项。



打开USB调试之后,可以通过Airttest IDE来检测adb是否能正常运行!
3.2 下载安装Airtest
下载压缩包过来,解压之后按照步骤安装就行了,打开软件进入这个界面!



通过USB线连接安卓设备:



4 抢红包流程回顾
打开手机微信,然后进入到聊天消息列表,从这里选择需要抢红包的群聊,然后分析下里面的元素标识,找对对应群聊的元素标识。



聊天页面中整体的群聊消息的元素标识



▲聊天页面中单个群聊消息的元素标识
然后在要抢红包的群里面,识别红包信息,然后执行抢红包的操作。先看下红包标识:



红包标识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 代码梳理
# 打开手机微信
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
#遍历消息并查找红包
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')
#初始化程序
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)
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:20
帖子:4
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP