脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python自动抢红包教程详解

Python自动抢红包教程详解

2021-07-03 00:37脚本之家 Python

在本篇文章里小编给大家整理了关于Python自动抢红包的相关知识点内容,有兴趣的朋友们参考学习下。

Python自动抢红包教程详解

0 引言

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

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

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

1 环境

操作系统:windows

python版本:3.7.2

手机系统:android

2 需求分析

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

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

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

3 前置准备

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

Python自动抢红包教程详解

在手机上打开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的界面如下:

Python自动抢红包教程详解

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

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

  • 点击连接面板中的 refresh adb 按钮,设备列表将会刷新。
  • 点击列表内对应设备的 connect 完成连接。
  • 若设备未刷出,点击 refresh adb 按钮。

Python自动抢红包教程详解

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

4 抢红包流程回顾

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

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

Python自动抢红包教程详解

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

Python自动抢红包教程详解

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

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

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

Python自动抢红包教程详解

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

Python自动抢红包教程详解

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

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

Python自动抢红包教程详解

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

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

Python自动抢红包教程详解

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

Python自动抢红包教程详解

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

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

5 代码梳理

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

?
1
2
# 打开手机微信
poco(text='微信').click()

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

?
1
2
3
4
5
# 群聊消息的元素标识
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))

选择并进入指定的群聊

?
1
2
3
4
5
6
7
8
9
# 指定抢红包的群聊名称
chat = input('请指定群聊名称:')
if chat in chat_names:
 index = chat_names.index(chat)
 # 点击进入指定的群聊
 chat_msg[index].click()
在微信聊天页面中,获取当前页面中的所有消息元素。
 
msg_list = poco("android.widget.listview").children()

遍历消息并查找红包

?
1
2
3
4
5
6
7
8
9
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中定义抢红包的动作

?
1
2
3
4
5
6
7
8
9
10
11
12
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,就会在编码区生成一段初始化的代码。

?
1
2
3
4
5
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」命令正常运行。

延伸 · 阅读

精彩推荐