使用Airtest薅短视频的羊毛

Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。  另外,Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。我使用Airtest而不适用appium主要是因为Airtest环境搭建非常方便,基本上安装后就把所有需要的工具都集成了,包括python和adb,Airtest中的Python和本机的Python是不一样的,所以要在本机运行还需要额外安装Python库:pip install poco。因为Airtest是网易开发的,所以拥有比较友好的文档和教程。官方文档Airtest快速上手教程airtest-ide教程airtest教程

这次要写的一个例子是抖音极速版赚金币的简单薅羊毛例子,非常简单,主要是为了使用Airtest。

安装Airtest

https://airtest.netease.com/下载对应平台的安装包,安装完后正常启动即可

使用Airtest薅短视频的羊毛_第1张图片

连接安卓模拟器

使用Airtest薅短视频的羊毛_第2张图片

打开Airtest,在右侧点击刷新ADB,会出现已经连接到电脑的机器(一定要打开USB调试模式),如果没有的话,就重启ADB,再进行刷新。出现连接机器后,在connect后面的下拉列表出现三个选项:Use javacap、Use ADB orientation、Use ADB touch。为了不出现莫名其妙的问题,最好全部选中,然后点击connect连接,就能显示出系统桌面。

使用Airtest薅短视频的羊毛_第3张图片

Airtest在执行的过程中,会向手机安装几个软件:Yosemite(一种输入法,主要是执行输入文字)、pocoservice-debug(执行Airtest发来的命令),在连接真机的过程中,报了一个错误Failure [INSTALL_FAILED_OLDER_SDK],手机版本太低,不能安装数据包。我有一个古董机,512运存的,Android版本是4.3,所以测试的时候一定要注意Android版本哦

写代码

这一篇我们主要不是讲Airtest教程,所以不进行详细讲解。这里我推荐一个非常好的学习网站--哔哩哔哩,就是这个二次元编程网站。上面有很多详细的视频教程,花一个小时看一下,再把官方教程过一遍,就差不多了。我们就以实例代码进行简单讲解。代码如下:

from airtest.core.api import *
from airtest.cli.parser import cli_setup
from poco.drivers.android.uiautomation import AndroidUiautomationPoco


class DouYin:
    def __init__(self):
        if not cli_setup():
            auto_setup(__file__, logdir=True, devices=[
                "Android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH"
            ])
        self.poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
        size = self.poco.get_screen_size()
        self.width = size[0]
        self.height = size[1]

    def VisitHome(self):
        self.poco(text="抖音极速版").click()

        # 进入短视频页面后,查找推荐元素是否存在
        self.poco(name='com.ss.android.ugc.aweme.lite:id/amh').wait(30)

        # 找到推荐元素表示已经进入首页,但是视频加载需要一些时间,这里等待5秒
        sleep(5)

        try:
            # 初次打开可能会出现青少年模式选项
            self.poco(text='我知道了').click()
        except:
            pass

    def LoopMove(self):
        start_pos = (0.5 * self.width, 0.8 * self.height)
        end_pos = (0.5 * self.width, 0.2 * self.height)
        while True:
            # 从底部滑到上面,切换视频
            swipe(start_pos, end_pos, duration=1)

            # 每个视频观看20秒
            sleep(20)


if __name__ == '__main__':
    douyin = DouYin()
    douyin.VisitHome()
    douyin.LoopMove()

在使用py脚本运行时,如果是Linux或者macOS的用户,请注意看运行结果是不是有报错,提示adb没有运行权限。

使用Airtest薅短视频的羊毛_第4张图片

官方文档已经给我们提示过了

使用Airtest薅短视频的羊毛_第5张图片

cd /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac
chmod +x adb

主要是auto_setup中连接设备的配置,官方文档中这样解释

使用Airtest薅短视频的羊毛_第6张图片

我们在连接中增加了参数设置capmethod、orimethod、touch_method,分别对应工具上的三个选项,不设置连接会出问题。

get_screen_size获取屏幕大小,这样对于不同的设备,不同的分辨率,滑动距离都是一样的。poco(text="抖音极速版").click()搜索屏幕上的“抖音极速版”元素,点击打开。要保证抖音在首页显示,如果不在首页要做滑动处理。sleep(5)视频加载需要时间,所以这里我们静候5秒swipe(start_pos, end_pos, duration=1)执行滑动操作,设置起点和终点以及滑动时间

然后就可以一直薅羊毛了,各种短视频都可以,当然安装完APP后,先手动打开登陆一下软件更好,这样我们的自动化操作就不需要做这些步骤了。

如果你觉得我的文章还可以,可以关注我的微信公众号,查看更多实战文章:Python爬虫实战之路也可以扫描下面二维码,添加我的微信公众号

公众号

如果你觉得我的文章还可以,可以关注我的微信公众号,查看更多实战文章:Python爬虫实战之路也可以扫描下面二维码,添加我的微信公众号

你可能感兴趣的:(Python,python爬虫)