使用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,在右側點擊刷新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爬蟲實戰之路也可以掃描下面二維碼,添加我的微信公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章