目 标 场 景

可能有人每天都忙碌于各类微信群中,专注抢红包。那是否可以利用 Python 实现自动抢红包呢?

image

当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢? 学习Python中有不明白推荐加入交流群号:984137898 群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!

答案是肯定的。这篇文章的目的是利用「Airtest」实现全自动抢群红包。

ps:红包只是图个乐呵,希望本篇文章仅仅用于学习。

准 备 工 作

首先需要在本机上配置好 Airtest 环境,配置及基本的使用方法查看下面链接。

其次,由于我使用的 Android 手机,所以需要提前配置好 Android 开发环境,保证「adb」命令正常运行。

打开 AirtestIDE,用数据线连上 PC后,就可以点击右上角的 connect 连接设备。

img

设备连接成功之后,紧接着滑动手机界面到包含「微信图标」的页面,就可以正式进入下面的操作了。

img

利用 AirtestIDE 新建一个项目,设备类型选中 Android,就会在编码区生成一段初始化的代码。

# -*- encoding=utf8 -*-

__author__ = "xingag"

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)

拷贝上面的代码到 Pycharm 中,并安装「pocoui」库。

pip3 install pocoui

ps:注意 Mac OS 安装会提示 adb 没有运行权限,只需要授予响应的权限即可。

# chmod +x /Users/xingag/anaconda3/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb

chmod +x [本机adb路径]

这里我新建了一个名称为「抢红包」微信群,便于后面的测试。

分 析 思 路

首先我们需要打开微信 App。

相比 Appium 需要通过包名和启动 Activity 的形式,Airtest 通过一行代码就可以实现打开应用。

# 指定当前界面text内容为【微信】的控件,执行点击操作

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

第一个 Tab 就是微信消息列表,这里显示了所有的群聊、单聊及一些消息。

img

通过「元素 name」找到所有的消息列表元素,然后就可以所有消息的内容。

# 消息列表

item_elements = poco(name='com.tencent.mm:id/b4m').offspring('com.tencent.mm:id/b4o')

# 获取所有消息列表的名称

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

找到目标群元素,就可以执行点击操作,进入群聊。

# 群名称

target = '抢红包'

index = names.index(target)

# 点击进入群聊

item_elements[index].click()

然后获取到当前群聊的所有消息元素。

# 1.获取消息列表元素

msg_list_elements_pre = poco("android.widget.ListView").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/apf')

# 2.2 是否已经领取元素

has_click_element = msg_element.offspring('com.tencent.mm:id/ape')

# 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

img

抢红包的操作就很简单了。点击还未抢过的红包,到抢红包对话框界面,点击「抢」按钮,就可以模拟抢一个红包的操作了。

抢完红包之后,需要模拟点击手机上的返回按键到消息列表页面,接着执行下一个抢红包的操作。

msg_element.click()

click_element = poco("com.tencent.mm:id/cv0")

if click_element.exists():

click_element.click()

# 返回

keyevent('BACK')

img

最后,把上面抢红包的操作定义为一个方法,循环来获取消息列表,获取到新的红包后,马上执行「抢红包」的操作。

while True:

get_red_package()

print('休眠1秒钟,继续刷新页面,开始抢红包。')

sleep(1)

结 果 总 结

执行程序,手机会自动打开微信,找到对应的群聊,进入消息列表页面,「定时」检查列表中的信息,如果发现有红包,就开始抢红包。

当然,消息列表页可以通过 swipe 函数向上滑动,获取更多的红包,原理类似。

img

python实时抢网页红包_Python实现自动抢红包功能相关推荐

  1. 用python语言模拟微信红包_python 模拟微信抢红包 基础语法实现demo

    1.实现微信抢红包 简易demo版 : 代码如下: from decimalimport Decimal # 提供了随机方法 import random print('$$$$$$weichat模拟微 ...

  2. python log函数怎么打_Python的log日志功能及设置方法

    python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客

  3. python爬虫爬微信红包_python 微信红包

    def redbags(money, num=10): import random choice = random.sample(range(1, money * 100), num - 1) cho ...

  4. python 装机配置_Python实现自动装机功能案例分析

    前言 提示:在管理服务器的过程中,发现有很多服务器在启动的过程中默认以PXE方式启动,这就导致我们无法将PXE装机程序放开到所有的交换机端口中,本文是以Python对dell服务器进行了一些控制,更多 ...

  5. python可以设计网页吗_python能做网页吗?

    展开全部 使用python Django做网页的步e69da5e887aa62616964757a686964616f31333337393566骤 1 .创建一个django项目 使用django- ...

  6. Python实现自动抢红包功能

    点击上方"程序IT圈",选择"置顶公众号" 每天早晨7点半,准点开车 本文来源于AirPython 目 标 场 景 可能有人每天都忙碌于各类微信群中,专注抢红包 ...

  7. python 实时数据推送_python scrapy 爬取金十数据并自动推送到微信

    一.背景 因业务需要获取风险经济事件并采取应对措施,但因为种种原因又疏忽于每天去查看财经日历,于是通过爬取金十数据网站并自动推送到微信查看. 二.目标实现 image 三.环境与工具 1.pychar ...

  8. python实现自动登录网页版_Python实现自动登录站点

    如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同). 一.确认软件版本 首先我们需要确认 ...

  9. python实时监控redis队列_Python的Flask框架应用调用Redis队列数据

    任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大 ...

最新文章

  1. HtmlUnit设置代理并解析IFrame页面
  2. java学习笔记15--多线程编程基础2
  3. 【转】C++一次读取整个文件
  4. Oracle中的pfile和spfile详解
  5. C语言侏儒排序Gnome sort 算法(附完整源码)
  6. 河南科技大学c语言网络教学平台,计算机基础教学部
  7. Ajax请求Session超时解决
  8. 非root用户组启动sftp_如何在 Debian 10 中配置 Chroot 环境的 SFTP 服务 | Linux 中国
  9. 明明的随机数(洛谷-P1059)
  10. php如何检查对象的类型,如何在PHP中检查对象的特定类型
  11. GitHub 的简单使用
  12. asp.net中的异步页面
  13. iOS 应用首次开启 出现引导页面
  14. 【TSP】基于matlab蚁群算法求解76城市旅行商问题【含Matlab源码 409期】
  15. codewhy 深入JavaScript高级语法(资源视频全)
  16. 专利CPC客户端保存文件出现Schema校验失败的解决方法
  17. SpringCloud Day05---服务网关(Gateway)
  18. web服务器的作用有哪些,web服务器的作用
  19. 量化股票交易接口如何一键执行委托下单?
  20. Vue学习之Vant图标使用及问题

热门文章

  1. 亚马逊正加紧布局 拟今年进军韩国市场
  2. 怎样才能获得积分啊??
  3. ggplot2--geom_smooth和曲线拟合画图
  4. 全球各国黑客网络犯罪形式概览
  5. 叽歪课堂 - Flutter 移动应用开发实战
  6. 型男索女俊男美女 说法大搜罗
  7. java使用二维数组和控制台实现五子棋单机版
  8. 兔子繁衍问题(PTA)
  9. 基于angular.js的全年日历作物操作甘特图
  10. 区块链+社群经济是什么样子?让「牛顿」的NewMall告诉你