哈喽,哈喽鸭!马上就快要过年啦,在春节的时间里,最少不了的就是在微信群里面发红包,图的就是一个喜庆。
两个消息,一个好消息,一个坏消息。
先说好消息,好消息就是微信群里有人要发红包,开心~
不过转念一想,前几次的红包一个都没抢到,这次???不由自主的叹了一口气 ...
过了一会,内心的情绪逐渐平复了。
心想:“难道就这么放弃了吗?晚饭还吃泡面(泡面感觉有被冒犯到
)?但是手动抢肯定没戏,毕竟手can谁也没办法!那就只能试试能不能通过编程的方式实现自动化抢红包了!”
操作系统:Windows
Python版本:3.7.2
手机系统:Android
需求就是自动抢红包,打开手机微信,然后找到要抢红包的群,识别群里的红包,然后再执行抢红包的动作。
这里需要注意的是如何识别群里的消息是普通的消息还是红包消息,这里可以通过微信聊天的元素标识来判断,这里是使用了一款名叫Airtest IDE的工具来实现!
因为要电脑连接到手机,所以需要使用一款叫做adb工具,它是安卓的调试桥梁。
打开手机的USB调试功能,然后设置开发人员选项。
打开USB调试之后,可以通过Airttest IDE来检测adb是否能正常运行!
下载压缩包过来,解压之后按照步骤安装就行了,打开软件进入这个界面!
通过USB线连接安卓设备:
打开手机微信,然后进入到聊天消息列表,从这里选择需要抢红包的群聊,然后分析下里面的元素标识,找对对应群聊的元素标识。
聊天页面中整体的群聊消息的元素标识
▲聊天页面中单个群聊消息的元素标识
然后在要抢红包的群里面,识别红包信息,然后执行抢红包的操作。先看下红包标识:
红包标识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
各元素的标识都已取到,接下来就是组织我们的代码。
# 打开手机微信
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)
架好神器,坐等红包,你那秒抢的速度,一定会把你七大姑八大姨,惊的一愣一愣的!大家喜欢的记得点点赞,需要完整的项目源码的可以私信我即可哟!
这行蓝色的字体也行wo~