侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python自动抢红包教程详解

Python  /  管理员 发布于 7年前   159

0 引言

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

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

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

1 环境

操作系统:Windows

Python版本:3.7.2

手机系统:Android

2 需求分析

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

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

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

3 前置准备

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

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

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

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

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

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

4 抢红包流程回顾

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

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

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

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

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

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

▲红包标识的示例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 代码梳理

首先得打开微信,利用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'红包已无效,跳过……') continueelse: 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 AndroidUiautomationPocopoco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

我们自己编写的Python代码中也需要加上这段初始化的代码。

再次强调,在执行脚本时要确保手机连上电脑,并确保「adb」命令正常运行。


  • 上一条:
    详解Python3之数据指纹MD5校验与对比
    下一条:
    python解压TAR文件至指定文件夹的实例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客