用純python腳本玩轉UU加速器

1. 前言

之前幾期內容,我們出過純py形式的Android自動化腳本。同學們一直讓再出一下純py形式的Windows腳本,今天我們以UU加速器爲例,給大家出一個簡單的學習demo。

2. UU加速器的自動化demo

今天的練習demo也非常簡單,大致內容是:

  • 確保先關閉UU加速器的進程
  • 打開UU加速器
  • 獲取UU加速器的句柄,並連接上
  • 給UU加速器做一些簡單的測試

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
from airtest_ocr.api import *
import os 
import win32api,win32con
import win32gui

def close_app():
    try:
        os.system("taskkill /f /im uu.exe")
    except:
        pass
    
def open_app():
    os.startfile(r"D:\Netease\UU\uu.exe")
    sleep(3)
    hwnd_title = {}
    def get_all_hwnd(hwnd, mouse):#獲得當前所有窗口句柄
        if (win32gui.IsWindow(hwnd)
                and win32gui.IsWindowEnabled(hwnd)
                and win32gui.IsWindowVisible(hwnd)):
            hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})

    win32gui.EnumWindows(get_all_hwnd, 0)#獲取uu加速器的窗口句柄
    for h, t in hwnd_title.items():
        if t == "UU加速器":
            uu_handle = h

    win = connect_device("windows:///{handle}".format(handle=uu_handle))#連接窗口
    sleep(3)
    
def UU_test():
    touch(Template(r"tpl1672282498716.png", record_pos=(0.132, 0.388), resolution=(791, 688)))

    touch(Template(r"tpl1671784347112.png", record_pos=(0.273, -0.296), resolution=(1000, 688)))
    sleep(1)
    text("絕地求生")
    sleep(1)
    
    touch(Template(r"tpl1672283419545.png", record_pos=(0.264, 0.064), resolution=(1000, 688)))

    assert_exists(Template(r"tpl1671784672194.png", record_pos=(-0.124, -0.046), resolution=(989, 688)), "找到結果")
    
    double_click(Template(r"tpl1671785263585.png", record_pos=(0.317, -0.307), resolution=(967, 688)))
    keyevent("^a") #全選
    sleep(1.0)

    keyevent("^c") #複製
    sleep(1.0)

    keyevent("{BACK}") #刪除
    sleep(1.0)

    keyevent("^v") #粘貼
    sleep(1.0)

close_app()
open_app()
UU_test()

3. 小結

1)os.system

system 函數可以將字符串轉化成命令在我們的機器上運行,就像我們寫的終止UU加速器的進程那樣:

os.system("taskkill /f /im uu.exe")
2)os.startfile

打開windows窗口:

os.startfile(r"D:\Netease\UU\uu.exe")
3)win32gui

win32gui模塊,可以幫助我們做很多關於Windows窗口的事情,比如:

# 判斷活躍窗口
win32gui.IsWindow()

# 獲取窗口標題
win32gui.GetWindowText()

# 枚舉窗口
win32gui.EnumWindows

......
4)連接窗口

在Airtest操作Windows窗口之前,我們必須使用連接窗口的語句,把目標窗口連接上,之後才能對它進行一系列的自動化操作:

win = connect_device("windows:///{handle}".format(handle=uu_handle))#連接窗口

當然,其實這裏我們也可以不用這麼複雜的方式來獲取句柄,直接使用正則表達式匹配窗口title,會更加簡潔好用:

win = connect_device("Windows:///?title_re=UU加速器.*")#連接窗口

那今天的練習就到這裏啦,希望同學們多多關注我們!


Airtest官網https://airtest.netease.com/
Airtest教程官網https://airtest.doc.io.netease.com/
搭建企業私有云服務https://airlab.163.com/b2b

官方答疑 Q 羣:117973773

呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~

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