在上一篇部落格中,我們重點介紹了下滑鼠和鍵盤的操作,如果大家沒有看過,可以查閱以下
部落格地址:https://www.cnblogs.com/bainianminguo/p/17666180.html
我們掌握了滑鼠和鍵盤操作,那下一步我們就需要掌握在哪裡做滑鼠操作。今天我就給大家出一個方案
基於pyautogui+opencv的方案
我們實戰中一般會這樣使用
import pyautogui import cv2 import os import time if os.path.exists("./abc.jpb"): os.remove("./abc.jpb") time.sleep(5) im = pyautogui.screenshot() im.save("./abc.jpg")
screenobj = cv2.imread("./abc.jpg") imobj = cv2.imread("./weichat.png")
screenobj = cv2.imread("./abc.jpg") imobj = cv2.imread("./weichat.png") res = cv2.matchTemplate(imobj,screenobj,cv2.TM_CCOEFF_NORMED)
# res是個二維列表,列表中最大值元素的位置就是對比後相似度最高的圖片的最上角的位置,
res = cv2.minMaxLoc(res)[3]
# cv2.minMaxLoc(res)返回四個值,分別是 最不相似的點分數,最相似點分數,最不相似點座標,最相似點座標,所以我們在這裡取的最後一個元素,也就是最相似點的元素
此時找到的元素是小圖示的左上角的座標,此時我們還需要在微調下,我們要點選的座標
screenobj = cv2.imread("./abc.jpg") imobj = cv2.imread("./weichat.png") res = cv2.matchTemplate(imobj,screenobj,cv2.TM_CCOEFF_NORMED) res = cv2.minMaxLoc(res)[3] print(screenobj.shape)
返回的資訊如下
(720, 1280, 3)
說明第一個元素縱座標,第二個元素的橫座標
screenobj = cv2.imread("./abc.jpg") imobj = cv2.imread("./weichat.png") res = cv2.matchTemplate(imobj,screenobj,cv2.TM_CCOEFF_NORMED) res = cv2.minMaxLoc(res)[3] print(screenobj.shape) clickpostion = [res[0] + imobj.shape[1]/2,res[1] + imobj.shape[0]/2] print(clickpostion) pyautogui.doubleClick(clickpostion)
然後我們在做雙擊操作即可
import pyautogui import cv2 import os import time if os.path.exists("./abc.jpb"): os.remove("./abc.jpb") time.sleep(5) im = pyautogui.screenshot() im.save("./abc.jpg") # 1、做螢幕截圖 screenobj = cv2.imread("./abc.jpg") imobj = cv2.imread("./weichat.png") # 2、將圖片讀入的物件中 res = cv2.matchTemplate(imobj,screenobj,cv2.TM_CCOEFF_NORMED) res = cv2.minMaxLoc(res)[3] # 3、通過比較,獲取兩張圖片畫素最相近的點的左上角的座標資訊 print(screenobj.shape) # 4、獲取小圖示的解析度 clickpostion = [res[0] + imobj.shape[1]/2,res[1] + imobj.shape[0]/2] print(clickpostion) # 5、找到小圖示的中間點的座標資訊 pyautogui.doubleClick(clickpostion) # 6、呼叫第一篇部落格的方法,做滑鼠或者鍵盤操作即可
通過上面的知識,相信大家已經可以做到gui的自動化了
我們的方案是基於pyautogui+openCV+fastAPI 實現的,目前我們內部也是基於這一套技術棧來gui的自動化,基本上可以滿足的我們的要求。有興趣或者有需要的小夥伴可以去實戰下