Python自动抢红包教程详解


Posted in Python onJune 11, 2019

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应用,只须一行代码即可搞定,如下

# 打开手机微信
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

在LuckyMoney中定义抢红包的动作

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,就会在编码区生成一段初始化的代码。

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」命令正常运行。

Python 相关文章推荐
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
Python3 使用cookiejar管理cookie的方法
Dec 28 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
PyTorch基本数据类型(一)
May 22 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
Python Print实现在输出中插入变量的例子
Dec 25 Python
解决paramiko执行命令超时的问题
Apr 16 Python
Django权限设置及验证方式
May 13 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
python解压TAR文件至指定文件夹的实例
Jun 10 #Python
python pyinstaller 加载ui路径方法
Jun 10 #Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 #Python
python处理“
Jun 10 #Python
python-pyinstaller、打包后获取路径的实例
Jun 10 #Python
详解Python 切片语法
Jun 10 #Python
使用Python OpenCV为CNN增加图像样本的实现
Jun 10 #Python
You might like
一个用于网络的工具函数库
2006/10/09 PHP
php 设计模式之 工厂模式
2008/12/19 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
AngularJS 最常用的八种功能(基础知识)
2017/06/26 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
python 写一个性能测试工具(一)
2020/10/24 Python
计算机应用职专应届生求职信
2013/11/12 职场文书
公司股东合作协议书
2014/09/14 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
python实现简单的井字棋
2021/05/26 Python