快过年啦,还怕手速慢,我用Python自动抢红包!

快过年啦,还怕手速慢,我用Python自动抢红包!_第1张图片
相信大家在节假日期间都会和亲戚朋友互发红包吧,有时候是给个人发红包,有时候是在群里抢红包,其实大家都知道真正的意义并不在于红包里的那点钱,最重要的是红包增进了相互之间的感情,并且还增添了几分节日气氛。

但是气氛归气氛,总是让你抢到最小的红包,或者当你看到红包的时候已经被抢光了,这时我们难免会有些不愉快。怎么办呢?别忘记我们有Python啊,号称除了生孩子其余的都会的一种编程语言!
快过年啦,还怕手速慢,我用Python自动抢红包!_第2张图片
抢红包不得不提一个Xposed框架,它可以说是专为抢红包而生的,但是很有点难受的是:使用Xposed框架有一个前提条件就是手机需要root,所以如果你是苹果手机,那么就需要越狱了,但是手机想要越狱就比较难,尤其是苹果这种国外品牌的手机,想要越狱难度就更大了。

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

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

1 环境

操作系统:Windows

Python版本:3.7.2

手机系统:Android

2 需求分析

制定的需求就是实现自动抢红包,打开微信,然后进入到要抢红包的群聊,识别群中的微信红包,再执行抢红包的动作就行。

当然这只是抢红包的关键动作,怎么实现还需要一步一步来,值得一提的是电脑版微信没有抢红包这个功能,所以还是需要通过电脑控制手机来自动抢,那就要确保「adb」命令可正常执行。

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

3:前置准备

3.1 打开手机的USB调试

想要使用「adb」,需要打开手机的USB调试功能,然后在设置中会出现手机系统设置的“开发人员选项”。

快过年啦,还怕手速慢,我用Python自动抢红包!_第3张图片
在手机上打开USB调试后,接下来我们通过Airttest IDE验证 adb 运行是否正常。

3.2 下载安装Airtest

下载地址:http://airtest.netease.com/

下载之后,解压打开就可以使用。
快过年啦,还怕手速慢,我用Python自动抢红包!_第4张图片

使用AirtestIDE对Android应用进行操作,先连接Android设备。
快过年啦,还怕手速慢,我用Python自动抢红包!_第5张图片

4.抢红包流程回顾

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

分析下里面的元素标识:
快过年啦,还怕手速慢,我用Python自动抢红包!_第6张图片
▲聊天页面中整体的群聊消息的元素标识

快过年啦,还怕手速慢,我用Python自动抢红包!_第7张图片
图片▲聊天页面中单个群聊消息的元素标识

接下来在要抢红包的群中,识别红包并执行抢红包的操作。

先看下红包标识:
快过年啦,还怕手速慢,我用Python自动抢红包!_第8张图片
▲红包标识1:com.tencent.mm:id/aql

快过年啦,还怕手速慢,我用Python自动抢红包!_第9张图片
▲红包标识的示例2 :com.tencent.mm:id/aql

点击红包,记录下弹出的红包页面中“开”的标识
快过年啦,还怕手速慢,我用Python自动抢红包!_第10张图片
▲大红包页面中”开“的标识 com.tencent.mm:id/d02

这里需要添加一个判断,检测这个红包是不是有效红包,如果已经被领取完,或者已经被自己领取,还是就是指定领取人的红包,在执行的时候就可以跳过。
快过年啦,还怕手速慢,我用Python自动抢红包!_第11张图片
▲已领取红包的标识 com.tencent.mm:id/apk

快过年啦,还怕手速慢,我用Python自动抢红包!_第12张图片
▲已被领完红包的标识 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)

如果本文对你有帮助的话,请不要吝啬你的赞,在看,谢谢!

我已经将全部源码上传到后台上,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

你可能感兴趣的:(python,编程,Python开发,python,抢红包,自动)