airtest
安裝
官網地址Airtest Project (netease.com)
啟動程序連接手機
你可以使用賬號登錄或直接點擊左下角“skip”按鈕跳過。
啟動Android模擬器或者用PC連接一台手機。通過adb命令檢查移動設備。
> adb devices
List of devices attached
46HDU18C27004111 device
常用命令
touch
touch(Template(r"tpl1627996328848.png", record_pos=(-0.339, 0.003), resolution=(1080, 2310)))
IDE默認生成的代碼,按照圖片查找
默認times=1表示點擊一次,需要多次點擊修改添加times,跟上次數就行
touch([10,10])
根據位置去點擊
touch命令如果沒有匹配到圖片會報錯,需要進行異常處理,否則程序會終止
swipe
用法比較多,具體可以參考文章swipe滑動
常用的兩種用法
swipe((672,1214),(336,1305),duration=0.3)
從一個坐標滑動到另一個坐標,可以是元祖,也可以是數組
duration為滑動所花的時間,根據實際情況盡量真實就行
swipe(Template(r"tpl1628053242231.png", record_pos=(0.011, -0.172), resolution=(1080, 2310)), vector=[0.2684, 0.0025])
r"tpl1628053242231.png"為獲取的圖像的中心點X,Y坐標
vector 滑動的屏占百分比,向右為X軸正向, 向下為Y軸正向
exists
好東西,使用比較多
exists(Template(r"tpl1628003095865.png", record_pos=(0.014, 0.048), resolution=(1080, 2310)))
# 檢測圖片存在不存在,不存在返回None,存在則默認返回中心X,Y坐標
# 比如先檢查下存在不存在,再去拿到坐標去點擊,還可以根據實際情況,修改坐標的相對位置
ad_p = exists(Template(r"tpl1628003095865.png", record_pos=(0.014, 0.048), resolution=(1080, 2310)))
if ad_p:
touch([866,ad_p[-1]])
sleep(4.0)
assert_exists
與exists類似,assert找不到會執行AssertionError
在查找的過程中exists如果找不到,只會執行兩次查找
assert_exists,如果沒找到,會執行多次重新查找匹配的過程
sleep
和time.sleep功能一樣,程序暫停運行時間
sleep(15.0)
暫停15秒
keyevent
不通過觸摸手機來觸發手機的按鍵事件
keyevent("BACK")
返回
keyevent("HOME")
返回主頁
keyevent("POWER")
按下手機電源鍵
建議
學習python語言基礎,airtestIDE中支持,python標准庫直接使用,和python語法
代碼參考
抖音極速版自動刷任務廣告,及首頁廣告
# -*- encoding=utf8 -*-
__author__ = "admin"
from airtest.core.api import *
import random
# 定義要用的常量參數
# 寶箱位置
box_position = [920,2017]
# from poco.drivers.android.uiautomation import AndroidUiautomationPoco
# poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
# 主頁視頻上滑
def ad_up():
swipe([540,1800],[540,500],duration=0.3)
sleep(0.5)
# 上滑
def up():
swipe([540,1300],[540,500],duration=0.3)
sleep(0.5)
# 下滑
def down():
swipe([540,500],[540,1300],duration=0.3)
sleep(0.5)
# 關閉廣告,再打開一個,再關閉
def close_ad():
keyevent("BACK")
sleep(3.0)
# 獲取繼續看廣告坐標,沒有就關閉
ad_p = exists(Template(r"tpl1628018577239.png", record_pos=(0.008, 0.019), resolution=(1080, 2310)))
if ad_p:
touch([ad_p[0],ad_p[1]+200])
sleep(38.0)
keyevent("BACK")
# 主頁廣告瀏覽
def first_ad():
for i in range(10):
ad_up()
sleep(random.randint(10,30))
if exists(Template(r"tpl1627998671215.png", record_pos=(0.001, 0.867), resolution=(1080, 2310))):
touch(Template(r"tpl1627998671215.png", record_pos=(-0.001, 0.872), resolution=(1080, 2310)))
# 看廣告賺金幣
def look_ad():
down()
down()
down()
up()
ad_p = exists(Template(r"tpl1628003095865.png", record_pos=(0.014, 0.048), resolution=(1080, 2310)))
if ad_p:
touch([866,ad_p[-1]])
sleep(4.0)
if exists(Template(r"tpl1628003095865.png", record_pos=(0.014, 0.048), resolution=(1080, 2310))):
return False
sleep(38.0)
close_ad()
return True
else:
return False
# 開寶箱得金幣
def box_ad():
touch(box_position)
sleep(5.0)
if exists(Template(r"tpl1628010958896.png", record_pos=(-0.101, 0.108), resolution=(1080, 2310))):
touch(Template(r"tpl1628002008078.png", record_pos=(-0.101, 0.109), resolution=(1080, 2310)))
sleep(38.0)
close_ad()
return True
else:
return False
# 檢測異常,重新走程序
def is_error():
# 正常繼續
if exists(Template(r"tpl1628003095865.png", record_pos=(0.014, 0.048), resolution=(1080, 2310))):
return True
# 異常關閉到主界面
else:
for i in range(6):
keyevent("BACK")
sleep(1.0)
return False
def make_money():
# 打開抖音app,打開來賺錢界面
start_app("com.ss.android.ugc.aweme.lite")
sleep(2.0)
touch(Template(r"tpl1627998671215.png", record_pos=(-0.001, 0.872), resolution=(1080, 2310)))
sleep(2.0)
def run():
make_money()
n = 40
normal = True
while n > 0:
if look_ad():
n -= 1
if not exists(Template(r"tpl1628003095865.png", record_pos=(0.014, 0.048), resolution=(1080, 2310))):
keyevent("BACK")
if box_ad():
n -= 1
if not exists(Template(r"tpl1628003095865.png", record_pos=(0.014, 0.048), resolution=(1080, 2310))):
keyevent("BACK")
sleep(2.0)
# 3次做一次異常檢測重新開啟程序
if n%3 == 0:
normal = is_error()
if normal:
keyevent("BACK")
first_ad()
else:
make_money()
normal = True
if __name__ == '__main__':
# script content
print("start...")
run()
