PYTHON 获取FRAME上的控件句柄 python获取当前控件名_Python

啊~~啊~~谁又在群里发红包啦?

我们在工作学习期间是不是经常错过了很多红包?感觉好几亿都与我们擦肩而过了。一刹那我仿佛看到了红包,但是无奈感慨单身30年的手速还是比不上别人!

作为一个技术宅是可忍孰不可忍!

前言

Xposed框架对于抢红包来说简直是神兵利器,但是事物是有两方面的虽然它方便了我们抢红包但是前提是需要我们手机root,那么对于苹果手机就得越狱了。

无论是越狱还是手机root,都会对我们的手机产生一定的风险性。那么有没有其他的一种方式可以实现抢红包呢?you need Python

环境配置

操作系统:Windows  手机系统:Android  Python版本:3.7 

实现步骤

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

第一步:打开手机进入微信群

第二步:识别微信红包

第三步:执行抢红包的动作

准备事项

注意:在识别是微信消息还是红包的过程中,我们这里借助了Airtest IDE这个工具

第一步:打开手机的USB调试

在开发者模式中我们打开USB调试之后。可以用Airttest IDE验证 adb 是否运行正常

PYTHON 获取FRAME上的控件句柄 python获取当前控件名_Android_02

下载安装Airtest IDE

AirtestIDE:跨平台的UI自动化测试编辑器

AirtestIDE可以去百度搜索官方网站下载

Airtest IDE的界面如下图

PYTHON 获取FRAME上的控件句柄 python获取当前控件名_Python_03

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

第一步:连接Android真机 

第二步:连接面板中的resh ADB 按钮,设备列表将会刷新

第三步:点击列表内对应设备的 Connect 完成连接

抢红包流程

进入微信里,在左侧的Tab页。选择微信群里进行抢红包

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

在AirtestIDE中 , 我们可以在树形结构中来检查控件,并且分页页面中的

PYTHON 获取FRAME上的控件句柄 python获取当前控件名_微信_04

然后在群中识别出红包。进行抢红包

PYTHON 获取FRAME上的控件句柄 python获取当前控件名_微信_05

接下来需要识别红包中 "开"  字的元素标识

PYTHON 获取FRAME上的控件句柄 python获取当前控件名_Android_06

基本的标识以及元素我们都已经获取到,下面就是我们的核心代码环节

核心代码

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

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

# 点击进入指定的群聊
 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')

# 判断红包是否有效并抢起来!
 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)


# 初始化程序
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)

后续

有的童鞋可能觉得安装Airtest IDE这个工具比较麻烦。Python这么强大,我们脱离这个工具也是可以的。那这个时候就需要同学们安装一个第三方模块 pocoui

pip install pocoui

pip install pocoui

 AirtestIDE 创建一个项目时候,设备的类型选中 Android,这样就会生成一个初始化代码

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

需要注意的是,在执行程序时要确保手机和电脑连接上,并保证 adb 命令正常运行。