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

35 篇文章 0 订阅
28 篇文章 0 订阅

每逢过年过节,大家都会在微信群里联系祝福自己的亲朋好友,有时候还会在群里发红包,让大家去抢,其实并没有多少人在乎红包里那点钱,主要还是为了烘托气氛,图个彩头。但是气氛归气氛,要是每次总是抢到最小的红包,或者显示红包已经抢光了,难免有点心情不愉快。

普通人遇到这种就只能怪手气不好或者手速慢了,但是我们是程序员啊,我们就是吃这门技术饭的,况且我们还会号称除了生孩子之外,无所不能的Python啊!

一说到抢红包,不得不说一个框架,它的名字叫做Xposed,这个框架可以说是专门为抢红包而生的!但是这个框架有个很难受的一点,如果想要运行它,那么手机需要root,这个就需要你越狱了!

如果你的手机是安卓,那么越狱应该还是可以实现的,如果是苹果的话,可能就没有那么容易实现了。

好了,不多说废话了,直接开始我们的实战吧!

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)
//加入ython编程学习群:808713721,免费获取本案例教程+源码+大量python编程资料,我等你来哦!

请仔细阅读上述代码最后一段代码!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盏离

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值