最近在做手机app自动化测试,想用python写个自动抢微信红包的程序,先在网上查了一下,发现抢红包教程要么是用itchat模块做到红包提醒功能,要么root手机后用Xposed框架,这两种方式都不是我想要的结果。于是我决定用appium模块实现此功能,最后发现仅用了80行代码,整个过程只涉及到元素检测和模拟点击操作,非常简单易懂,下面给大家详细介绍一下我是如何实现的。
整体思路:
这是整个程序的框架图,首先需要模拟登录微信,然后进入微信聊天界面,接着进入循环过程:
打开第一个聊天窗口,检测有无未领取的红包,若无,则直接返回;
若有,先检测是否被领完,若未领完则打开该红包,若领完则返回。
通过设置适当时间间隔,就可以一直检测最新消息中有无红包。
环境配置:
首先需要安装appium并配置相关环境。主要方法是:
先在官网下载安装appium,然后安装Android SDK,但是直接安装的话会有各种bug,很不方便,我的方法是先安装Android Studio,在它里面可以安装Android SDK,最后再安装JAVA,并配置JAVA_HOME和CLASSPATH两个参数的环境变量,这套流程下来以后就可以使用appium了。
appium使用简介
appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用,支持IOS、Android及FirefoxOS平台。作为自动化测试工具,主要是先定位app界面的元素,再通过模拟点击、滑动等动作来操控手机,从而达到自动化测试的效果。
Python调用appium模块前,要先打开appium客户端
再点击start Server
再点击右上角的搜索框
接着配置4个参数,第一个是手机系统版本,第二个是手机具体型号(在手机设置-关于手机中可以找到),第三、四分别是微信APP的appPackage和appActivity参数,获取方法如下:
1.首先在Android SDK安装文件夹下找到aapt.exe工具,并记住该路径。
2.下载微信app到电脑,保存位置,打开命令行,执行如下代码:
其中上面是aapt.exe工具所在的位置,红色遮住的是微信APP所在的位置,回车,在返回结果中寻找
这是微信APP的appPackage参数
这是微信APP的appAcivity信息。
到此,我们的准备工作就完成了,下面就开始抢红包操作了。
自动抢红包流程:
第一步:模拟登录
主要是用appium模拟按键操作,步骤是比较好理解,代码如下:
其中第一行的desired_caps既是上述的四个参数。
本次采用的是QQ号登陆方式,效果如下:
第二步:循环点击第一个聊天窗口所在的坐标
一般情况下,最新消息都是在最上方,所以我们只需循环打开第一个聊天窗口,检测有无未领取的红包即可。
需要注意的是,微信订阅号和一般聊天窗口的返回元素是不同的,要做好区分,本文是识别到微信订阅号后直接删除该聊天框。
第三步:判断当前联系人窗内的红包是否未领取
有时候聊天界面会有好多红包,有已被自己领取的,有未被自己领取的,我们首先要排除掉已领取的红包,先来分析一下已领取的红包:
已领取的红包多了“已领取”3个字
它的元素为:
所以我们只需要分析一下红包元素里是否存在‘com.tencent.mm:id/aul’,就可以判断该红包是否已领取,代码如下:
若存在,说明红包已领过,则返回;若不存在,则进入第四步领取红包。
第四步:领取红包
因为不能确定每个未被自己领取的红包是否已被别人领完,所以打开红包以后还要检测一下红包是否被领完
分两种情况:
1.红包未被领完,则点击领取;
2.红包已被领完,则返回。
点击下面叉号返回:
第五步:整体效果展示
下面给大家演示一下全自动抢红包的整个流程:
友情提示语:抢红包虽爽,但也要注意礼尚往来哦!
PS:本文完整代码可在微信后台回复:qhb 获得
继续送书,前天中奖的朋友是:@坏蛋的坏,麻烦看到以后,在后台加我微信,告诉我快递信息,之后安排寄给你。
今天也会从留言区中抽一位朋友,送出下面一本书,后续公布中奖人,感兴趣的话就留言吧,中奖率还是蛮高的。多说句,如果你留言了,那么一定要关注我之后的推文,说不定你就中奖了,如果你忘记了,我就会发给别人。
/今日留言主题/
我经常抢不到红包抢到了也很小, 你呢?
/今日送书一本/