本文来源于公众号:

AirPyt

hon

1

目 标 场 景

如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸。

与传统的红包不一样,视频红包包含位置的不确定性、大小不确定性、元素 ID 的不确定性等......这些不确定性都会导致抢红包的操作变得异常的复杂。

本篇文章的目的是利用 Python 自动化实现「抢视频红包」这一骚操作。之前有分享过群里抢红包的,链接:Python实现自动抢红包功能

ps:本文仅用作学习交流,请勿用于其他用途。

2

准 备 工 作

在开始编写脚本之前,需要做如下准备

1、一部 Android 手机,并在 PC 端配置好ADB 运行环境

2、Python 虚拟环境下安装自动化依赖库、图片对比依赖库

3、PS 或者其他图片编辑软件

# 自动化依赖

pip3 install pocoui

# 图片对比依赖

pip3 install aircv

3

编 写 代 码

第一步,我们需要借助 Airtest 驱动手机打开目标短视频 App。

# 目标应用的包名和LaunchActivity

self.package_name = 'com.**.weishi'

self.home_activity = 'com.**.oscar.module.splash.SplashActivity'

# 回到主界面

home()

# stop_app(self.package_name)

# 打开应用

start_my_app(self.package_name, self.home_activity)

第一次打开应用的时候,会弹出一个警告对话框。

这里利用「异步线程」去处理。

循环检测对话框元素是否存在,一旦出现,就模拟点击操作,关闭这个对话框。

def __handle_dialog(self):

"""

处理警告对话框

:return:

"""

count = 0

while count < self.wait_for_dialog_timeout:

tip_notice = self.poco('com.tencent.weishi:id/title_text', text=u'青少年保护功能提示')

try:

if tip_notice.exists():

# 关闭

print('出现警告对话框,关闭之。')

self.poco('com.tencent.weishi:id/close_btn').click()

break

else:

pass

except Exception as e:

print('产生异常了')

time.sleep(1)

count += 1

# 异步处理

threading.Thread(target=self.__handle_dialog, name='thread1').start()

第二步,「判断」当前播放的视频是否是一个包含红包的视频。

通过对大量视频的观察,可以看出视频内包含两类红包,分别是普通视频红包、问答视频红包。

通过 Android SDK 自动的工具 Monitor 查看界面元素。

可惜的是,这个互动红包元素标识「元素 ID 不存在」,并且 Text 属性也为空,没法利用传统的方式来获取到。

我换一种方式来实现,利用「图片对比」技术来判断互动红包元素是否存在,进而判断视频是否是一个包含红包的视频。

利用「PS」把互动红包元素图片从屏幕截图中裁剪出来。

需要注意的是,由于这个元素形状不规则,这里只能裁剪一个规则的矩形区域,不能截取其他多余的区域,否则会导致图片比对会失败。

接着利用 adb 命令截取手机屏幕的图片,然后保存到本地。

def save_screenshot_to_pc(desc):

"""

获取屏幕截图

desc 截图保存路径

:return:

"""

exec_cmd('adb shell /system/bin/screencap -p /sdcard/screenshot.png')

exec_cmd('adb pull /sdcard/screenshot.png %s' % desc)

然后就可以利用「aircv」库,利用上面裁剪的图和屏幕截图进行比对,判断裁剪的互动红包元素是否能匹配到。

当匹配指数为 0.8 以上的时候,就认为当前视频内一定包含红包。

def find_image(source_path, part_path):

"""

匹配模板

:param source_path: 原图片

:param part_path: 待匹配的图片

:return:

"""

# 原始图像

source = ac.imread(source_path)

# 待查找的部分

part = ac.imread(part_path)

result_raw = ac.find_template(source, part)

# 匹配图片中心点坐标

if result_raw and result_raw.get('confidence') >= 0.8:

center_position = result_raw.get('result')

print(result_raw)

else:

center_position = None

return center_position

第三步,如果判断当前视频内包含互动红包元素,就可以执行「抢红包」的操作了。

首先,利用 Monitor 截取红包出现那一刻的界面元素树,依然可以看到红包图片元素不存在 ID 和 Text 属性。

然后我首先想到是否可以利用上面的方式,通过局部图片匹配去拿到红包图片的中心点坐标。

可是通过大量的测试发现,视频中红包图片元素的大小「存在不确定性」,用 PS 截取的图片不能适用于所有视频。

最后,只能通过分析元素的层次结构,拿到存在元素 ID 的最近一级父类元素,然后再去得到红包元素,进而得到「bound」属性值。

vp = self.poco('com.tencent.weishi:id/hippy_container')

if vp.exists():

# 元素

try:

red_package_element = vp.children()[0].children()[0].children()[0].children()[0]

except Exception:

print('产生一个异常')

continue

# 获取bound()属性

element_size = red_package_element.get_bounds()

拿到红包图片元素的 bound 属性之后,就可以计算出红包图片元素的中心点坐标。

def get_element_center_position(poco, bound):

"""

获取元素的中心点坐标

:return:

"""

# 获取手机屏幕的宽、高

screen_width = poco.get_screen_size()[0]

screen_height = poco.get_screen_size()[1]

# 元素的中心点坐标

center_position = (bound[1] + bound[-1]) / 2 * screen_width, (

bound[0] + bound[2]) / 2 * screen_height

return center_position

我们都知道一段视频中,红包出现的时间存在不确定性。

通过对红包图片出现前和出现后的元素树进行对比,可以发现,当红包出现的时候,红包图片元素「存在多个子元素」。

因此可以循环获取 UI 元素树,直到红包元素存在子元素的时候,就退出循环。

# 一直等待红包元素出现,才执行点击操作

if len(red_package_element.children()) > 0:

print(center_position)

break

else:

# print('等待红包出现可以点击')

pass

通过点击红包元素的「中心点坐标」,就可以完成抢视频红包的最后操作。

# 获取到红包坐标之后,执行点击点击操作,直到抢到红包为止

exec_cmd('adb shell input tap %d %d' % (center_position[0], center_position[1]))

4

结 果 结 论

通过上面的操作,完成了抢普通视频红包的操作,循环操作就可以拿到应用内的所有的普通视频红包。

针对问答视频红包,利用 Monitor 可以直接拿到题目和答案的文本内容,这需要针对题目内容和答案进行一次匹配。

我已经将源码上传到后台上,关注公众号后回复「抢红包」即可获得下载链接。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

点个"

在看

",告诉我你曾来过

python抢红包脚本_Python自动抢视频红包,仅供学习!相关推荐

  1. python图片裁剪对比_Python自动抢视频红包,仅供学习!

    本文来源于公众号: AirPython 1 目 标 场 景 如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸. 与传统的红包不一样,视频红包包含位置的不确 ...

  2. python抢红包脚本实例-自动抢红包,点赞朋友圈,python解放你的双手

    引言: 其实这一篇本来不是写这个的,在周一开始想做的时候就想好了标题: <Android与Python的巧妙结合抓取公众号所有历史文章>, 想做爬公号历史文章的应该都了解过,而且文章也越来 ...

  3. python扫雷脚本_Python自动扫雷实现方法

    本文实例讲述了Python自动扫雷实现方法.分享给大家供大家参考.具体如下: #pyWinmineCrack.py # coding: utf-8 import win32gui import win ...

  4. python刷票脚本_python自动刷票脚本(在不封IP的情况下)

    # -*- coding:UTF-8 -*- from selenium import webdriver from selenium.common.exceptions import NoSuchE ...

  5. Python爬取重点产业专利信息网(仅供学习交流!!)

    由于要做有关专利方面的研究,所以选择了重点产业专利信息网获取数据,该网站提供了数据下载功能,但由于网站响应比较慢,而且需要数量较多,所以选择爬虫进行爬取. 1.数据获取 经过分析发现该网站需要模拟登录 ...

  6. python自动抢_Python+Appium实现自动抢微信红包

    前言 过年的时候总是少不了红包,不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情. 于是我用python解决我们的手速问 ...

  7. python自动刷快手视频脚本_python自动刷快手视频_快手加抖音自动刷视频脚本,引用的是python+易语言编程......

    其实这个代码我这边已经整合好了,已有易语言版!!! 下面分享的仅仅只是"python"代码 先看下易语言版的界面: "python"代码 import os i ...

  8. 薅羊毛 | Python 带你抢视频红包,不放过一个红包!

    阅读文本大概需要 15 分钟. 1 目 标 场 景 如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸. 与传统的红包不一样,视频红包包含位置的不确定性.大 ...

  9. 我用Python自动抢微信红包!

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

最新文章

  1. 五子棋html游戏代码与算法介绍
  2. ps图片边缘淡化接近背景色_7招让你抠图不再犯愁之PS抠图技巧大合集!
  3. 独家 | 基于TextRank算法的文本摘要(附Python代码)
  4. 雨棚板弹性法计算简图_造价工程师:钢结构工程量计算注意事项
  5. “你们对编程和头发一无所知。”
  6. require.context实现前端工程自动化
  7. Java Web Start实例
  8. 企业级应用_浪潮NF8480M5,支撑新时代的企业级应用
  9. shell 字符串
  10. java field setfont_java高手请进!
  11. 数学逻辑习题集(2)
  12. 如何在Mac电脑上更改地区或国家?
  13. php店铺处罚功能开发,Shopee平台店铺扣分惩罚机制详析!
  14. unity code之FBX模型导入与渲染
  15. webassembly介绍
  16. 贵州贵安新区试点大数据精准扶贫运营管理
  17. 华为AC+AP设备上线思路
  18. VMware 常见问题集锦
  19. 开维控制精灵 Ctrl js 快手小游戏 - 自动消砖块
  20. ChatGPT4高分通过数据库系统工程师(DBA)认证

热门文章

  1. BPF-JIT中bug归类
  2. 模拟GRE隧道建立过程
  3. 4K屏幕/高分辨率屏幕运行VMware虚拟机图标字体太小问题解决方案(linux系统)
  4. Python版 孤勇者 | 画图+演奏+音乐可视化
  5. BGP比较基础的实验
  6. 不属于神经网络常用算法,神经网络算法包括哪些
  7. Cryptocell-712安全引擎概述
  8. 【K8s】部署自定义项目到K8s集群上运行
  9. 多线程开发实战:Java实现多线程四种方式及相关方法原理
  10. diy 服务器 支持 esxi,【我的技术我做主】IT屌丝DIY ESXI虚拟化服务器再度升级ESXI6.0...