Python代码实战项目(秒抢红包)

一、知识点分析

1.AirtestIDE:
  是一个配套推出的跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写脚。
2.pycharm:
  PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
3.逍遥模拟器(非必须):
  Android手机模拟器,其他模拟器也可以,例:网易Mumu、夜神、逍遥、iTools、天天、海马玩、BlueStacks等。


模拟器连接端口汇总

二、环境及安装包

1.操作系统
  Windows 10 家庭中文版
2.软件包

       AirtestIDEAirtestIDE-win-1.2.13.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)【提取码:csak】
  Pycharm社区版pycharm-community-2020.1.exe_免费高速下载|百度网盘-分享无限制 (baidu.com)【提取码:csak】
  逍遥模手游拟器XYAZ-Setup-7.6.5-haa539ed70.exe_免费高速下载|百度网盘-分享无限制 (baidu.com)【提取码:csak】
  Python-3.7.2环境python-3.7.2-amd64.exe_免费高速下载|百度网盘-分享无限制 (baidu.com)【提取码:csak】

三、软件安装步骤(环境准备)

1、解压 AirtestIDE-win-1.2.13.zip创建AirtestIDE快捷方式(过程简单不在赘述)
2、双击 pycharm-community-2020.1.exe默认下一步安装即可(过程简单不在赘述)
3、双击 XYAZ-Setup-7.6.5-haa539ed70.exe默认下一步安装即可(过程简单不在赘述)
4、双击 python-3.7.2-amd64.exe默认下一步安装即可(过程简单不在赘述)
1)、配置python环境变量:
查看python安装路径

复制python绝对路径

 win+R-->输入 sysdm.cpl回车-->点击“高级”-->点击“环境变量”-->双击"Path"

 点击 “新建”粘贴刚才复制的python路径后依次点击确定即可

2)、利用pycharm安装所需模块
打开 pycharm利用pip3安装poco模块:

新建python虚拟环境后随意创建个py文件,点击下方Terminal终端输入:pip3 install pocoui
如图:(因为我已经安装,正常安装需要几分钟时间,看网速快慢)

(注意:进行上边步骤 前需要提前配置pycharm的python,也就是告诉pycharm你安装的python在哪里,自行百度配置这里不在赘述。)

 

3)、逍遥模拟器设置
去 应用商城下载某信,然后 打开开发者模式:
点击“设置”

 

点击 最下发“关于平板 电脑”

 

 双击“版本号”(会有提示:告诉你双击几次后打开开发者模式)

返回上一级最底部会出现“开发者选项”点击进入,开启
USB调试

 

四、代码分析

1.引入poco模块

# -*- encoding=utf8 -*-
__author__ = "Mr.WangXinkun"

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)

2.模仿手指点击打开“某信”

poco(text='某信').click()

3.获取某信群消息列表

item_elements = poco(name='com.tencent.mm:id/f67').offspring('com.tencent.mm:id/fzg')

4.获取某信群消息列表名称

names = list(map(lambda x: x.get_text(), item_elements))

5.指定群名称(人名称亦同)

target = '阿坤红包测试'
index = names.index(target)

6.点击进入群聊

item_elements[index].click()

7.获取群内每条消息元素

msg_list_elements_pre = poco("com.tencent.mm:id/awv").children()

8.从最近的一个红包开始抢,所有需要反转群聊消息

msg_list_elements = []
for item in msg_list_elements_pre: 
    msg_list_elements.insert(0, item)

9.筛选红包和已失效红包

for msg_element in msg_list_elements:

        # 2.1 某信红包标识元素
        red_key_element = msg_element.offspring('com.tencent.mm:id/u5')

        # 2.2 是否已经领取元素
        has_click_element = msg_element.offspring('com.tencent.mm:id/tt')

        # 2.3 红包【包含:收到的红包和自己发出去的红包】
        if red_key_element:
            print('发现一个红包')
            if has_click_element.exists() and (
                    has_click_element.get_text() == '已领取' or has_click_element.get_text() == '已被领完'):
                print('已经领取过了,略过~')
                continue
            else:
                print('马上抢红包')

        else:
            print('红包元素不存在')
            continue

10.抢红包

msg_element.click()
click_element = poco("com.tencent.mm:id/f4f")
if click_element.exists():
    click_element.click()
    #返回
    keyevent('BACK')

11.持续输出

while True:
        #写成一个方法持续抢红包
        get_red_package()
        print('休眠1秒钟,继续刷新页面,开始抢红包。')
        sleep(1)

五、代码整合实践

代码整合:

 

# -*- encoding=utf8 -*-
__author__ = "Mr.WangXinkun"

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)

#打开某信
poco(text='某信').click()




# 消息列表
item_elements = poco(name='com.tencent.mm:id/f67').offspring('com.tencent.mm:id/fzg')
# 获取所有消息列表的名称
names = list(map(lambda x: x.get_text(), item_elements))

# 群名称
target = '阿坤红包测试'
index = names.index(target)
# 点击进入群聊
item_elements[index].click()

def get_red_package():
# 1.获取消息列表元素
    msg_list_elements_pre = poco("com.tencent.mm:id/awv").children()

    msg_list_elements = []
    for item in msg_list_elements_pre: 
        msg_list_elements.insert(0, item)


    for msg_element in msg_list_elements:

            # 2.1 某信红包标识元素
            red_key_element = msg_element.offspring('com.tencent.mm:id/u5')

            # 2.2 是否已经领取元素
            has_click_element = msg_element.offspring('com.tencent.mm:id/tt')

            # 2.3 红包【包含:收到的红包和自己发出去的红包】
            if red_key_element:
                print('发现一个红包')
                if has_click_element.exists() and (
                        has_click_element.get_text() == '已领取' or has_click_element.get_text() == '已被领完'):
                    print('已经领取过了,略过~')
                    continue
                else:
                    print('马上抢红包')

            else:
                print('红包元素不存在')
                continue
             #抢红包
            msg_element.click()
            click_element = poco("com.tencent.mm:id/f4f")
            if click_element.exists():
                click_element.click()

                keyevent('BACK')


#持续输出
while True:
        get_red_package()
        print('休眠1秒钟,继续刷新页面,开始抢红包。')
        sleep(1)

1.打开AirtestIDE,将上方代码复制黏贴:

 

 2.远程设备链接设置
adb connect 127.0.0.1:21503

 

3.点击“连接”->点击“刷新ADB”

 

 4.点击connect

 

 5.点击左上方运行代码

 

 6.运行效果如下 :

 

 注意事项:
  代码总体架构是直接可以跑的,但是由于每个设备的 某信name元素是不一样,所以需要替换代码中的六个name元素:
1.某信 首页群消息列表ListView元素

com.tencent.mm:id/f67

2.群名称name元素

com.tencent.mm:id/fzg

3.群内消息列表ListView元素

com.tencent.mm:id/awv

4.“某信红包”识别元素

com.tencent.mm:id/u5

5.红包“已领取”识别元素

com.tencent.mm:id/tt

6.红包“开”按钮元素

com.tencent.mm:id/f4f

(注:元素更换方法稍微有基础的小伙伴5分钟就可以完成,也可点赞 +关注+转发+评论 私聊博主教你)

六、总结

  由于时间有限,目前实现的是指定固定的群名称进行红包消息筛选抢红包。消息列表页可以通过 swipe 函数向上滑动,获取更多的红包,原理类似。感兴趣的小伙伴可以自行研究一下哈!喜欢的小伙伴可以点点关注,博主会不定期更新一些大家 感兴趣的Python实战项目!

 

posted on 2022-01-30 23:17  csdn阿坤  阅读(1043)  评论(0编辑  收藏  举报

导航