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。
https://airtest.netease.com/下载对应平台的安装包,安装完后正常启动即可
打开Airtest,在右侧点击刷新ADB,会出现已经连接到电脑的机器(一定要打开USB调试模式),如果没有的话,就重启ADB,再进行刷新。出现连接机器后,在connect后面的下拉列表出现三个选项:Use javacap、Use ADB orientation、Use ADB touch。为了不出现莫名其妙的问题,最好全部选中,然后点击connect连接,就能显示出系统桌面。
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没有运行权限。
官方文档已经给我们提示过了
cd /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/airtest/core/android/static/adb/mac
chmod +x adb
主要是auto_setup中连接设备的配置,官方文档中这样解释
我们在连接中增加了参数设置capmethod、orimethod、touch_method,分别对应工具上的三个选项,不设置连接会出问题。
get_screen_size
获取屏幕大小,这样对于不同的设备,不同的分辨率,滑动距离都是一样的。poco(text="抖音极速版").click()
搜索屏幕上的“抖音极速版”元素,点击打开。要保证抖音在首页显示,如果不在首页要做滑动处理。sleep(5)
视频加载需要时间,所以这里我们静候5秒swipe(start_pos, end_pos, duration=1)
执行滑动操作,设置起点和终点以及滑动时间
然后就可以一直薅羊毛了,各种短视频都可以,当然安装完APP后,先手动打开登陆一下软件更好,这样我们的自动化操作就不需要做这些步骤了。
如果你觉得我的文章还可以,可以关注我的微信公众号,查看更多实战文章:Python爬虫实战之路也可以扫描下面二维码,添加我的微信公众号
如果你觉得我的文章还可以,可以关注我的微信公众号,查看更多实战文章:Python爬虫实战之路也可以扫描下面二维码,添加我的微信公众号