python在屏幕上點擊特定按鈕或圖像效果實例
想要的效果
大概就是搞個windows桌面自動點擊程序,以新浪微博自動點贊為例。
需要用到的函數(shù)庫
PyAutoGUI——圖形用戶界面自動化(主要用到這個)
PyAutoGUI是Python功能強大的UI自動化庫,其目的是可以用程序自動控制鼠標和鍵盤操作,主要用來實現(xiàn)PC端的UI自動化。
- 有鼠標控制、鍵盤操作、屏幕截圖、圖片定位、消息對話框、窗口操作等功能;
- 有倒計時、鼠標坐標顏色抓取小程序、UI自動化迷你語言等實用工具;
- 有故障安全、通用暫停等機制。
Pillow——圖像處理
該庫提供廣泛的文件格式支持、高效的內(nèi)部表示和相當強大的圖像處理功能。旨在快速訪問以幾種基本像素格式存儲的數(shù)據(jù)。它應該為一般的圖像處理工具提供堅實的基礎。
- 該庫包含基本的圖像處理功能,包括點操作、使用一組內(nèi)置卷積內(nèi)核進行過濾以及色彩空間轉(zhuǎn)換。
- 該庫還支持圖像大小調(diào)整、旋轉(zhuǎn)和任意仿射變換。
- 有一種直方圖方法允許您從圖像中提取一些統(tǒng)計信息。這可用于自動對比度增強和全局統(tǒng)計分析。
OpenCV——是開源的計算機視覺和機器學習庫(不太了解,問題不大)
它輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。
前面的看不看都一樣進入正題
例如實現(xiàn)功能,打開新浪微博首頁,我們要識別圖中的的贊,并點擊。
1),使用pyautogui.mouseInfo()獲取目標圖片(屏幕上需要點擊的圖像)位置,以新浪微博點贊為例,寫代碼截取點贊的手勢圖片,代碼如下:
import pyautogui pyautogui.mouseInfo()#獲取點贊圖片的位置(1127,756,1146,775)
from PIL import Image import pyautogui import time time.sleep(2)#留一點切換頁面時間 im = pyautogui.screenshot()#截取整個屏幕 om = im.crop((1127, 756, 1146, 775))#根據(jù)截取的屏幕僅截取“帶贊的手勢圖片”,用pyautogui.mouseInfo()獲取圖片的位置(1127,756,1146,775),這里截取區(qū)域用到了Pillow om.save(r"C:\Users\zz\Desktop\dianzan.png")#將圖片保存供pyautogui.locateOnScreen()使用
截圖效果:
ps:自己手動截圖也一樣,還有最重要每當初次運行時要確保圖像不出錯還是重新用程序截一個圖靠譜。
2),獲取贊截圖后使用pyautogui.locateOnScreen()識別圖像獲取贊圖像的位置,再用pyautogui.center()獲取中心點,代碼如下:
import pyautogui import time time.sleep(1) def zan(): time.sleep(1) # 這個可以用來防止操作過快 left, top, width, height = pyautogui.locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png") # 尋找剛才保存點贊手勢圖片 center = pyautogui.center((left, top, width, height)) # 尋找圖片的中心 pyautogui.click(center) print('點贊成功!') count = 10 # 為了防止一直運行下去,點一定數(shù)量的贊就結(jié)束,自己定義 while count: try: zan() # 調(diào)用點贊函數(shù) count -= 1 except TypeError: # 錯誤類型沒有也文圖不大,哈哈哈 pyautogui.scroll(-500) # 本頁沒有圖片后,滾動鼠標; print('沒有找到目標,屏幕下滾~') print("點10個贊結(jié)束!")
運行結(jié)果:
代碼輸出如下:
一般基本原理以上就是了,大概。。。。但是要提高pyautogui.locateOnScreen()識別圖像速度和效率的話看下面:
圖片定位不穩(wěn)定的四種解決方案
方案介紹
1.模糊定位:借助opencv的來提高識別率,加入
confidence
參數(shù)調(diào)整識別準確度,當confidence
越小,定位的精度就會越低,從而實現(xiàn)模糊定位。2.灰度匹配:加入grayscale參數(shù),當grayscale=True時會使圖像和屏幕截圖中的顏色去飽和,解決由于顯示器飽和度不同從而引起的顏色細微差異因而導致的圖像定位失敗問題。
3.指定范圍:加入region參數(shù),可以控制找圖范圍提高找圖效率。
4.多圖定位:圖標在不同場景下可能有不同的顯示效果,可以把不同顯示效果的多張圖片歸為一個事件,對多張圖進行循環(huán)查找,定位一張圖就可以對整個事件進行定位。
1.模糊定位
在pyautogui.locateOnScreen()
函數(shù)中加入confidence
參數(shù),當confidence的值決定精度,代碼如下:
left, top, width, height = pyautogui.locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png", confidence=0.9) #太長了下面用xy表示
2.灰度匹配
在pyautogui.locateOnScreen()
函數(shù)中加入grayscale=True,就可以實現(xiàn)灰度匹配,代碼如下:
xy = locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png", grayscale=True)
3.指定范圍
加入region參數(shù),可以控制找圖范圍,從而提高找圖效率。region(x,y,width,height),其中x,y為范圍左上角坐標,width,height為范圍的寬和高,代碼如下:
xy = pyautogui.locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png", region=(1128, 208, 1158, 1027))
4.多圖定位
可以對一個圖標截多張不同的圖,每一張圖都代表這個圖標,只要定位其中一張圖就能定位這個圖標。對locateOnScreent()函數(shù)進行二次封裝,多張圖片之間用 ' | ' 間隔,實現(xiàn)循環(huán)找圖,代碼如下:
from pyautogui import * #把字符串按'|'切割 def word_cut(args): tup = [] if '|' in args: re1 = args.split('|') return re1 else: tup.append(args) return tuple(tup) #判斷圖像是否找到,如果找到就返回True,沒找到就跳過 def assertPIC(args): if locateOnScreen(args) == None: pass else: return True #循環(huán)找圖,找到就返回圖像中心點,沒找到就打印'沒找到' def img_locat(args): arg = word_cut(args) for i in range(len(arg)): if assertPIC(arg[i]): return center(locateOnScreen(arg[i])) else: print('沒找到') #測試 print(img_locat('test1.png|test2.png'))
所以最后的程序可以這樣:
import pyautogui import time time.sleep(1) def zan(): time.sleep(3) # 這個可以用來防止操作過快 left, top, width, height = pyautogui.locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png", confidence=0.9, region=(1101, 190, 1240, 1034)) # 尋找剛才保存點贊手勢圖片 center = pyautogui.center((left, top, width, height)) # 尋找圖片的中心 pyautogui.click(center) print('點贊成功!') count = 10 # 為了防止一直運行下去,點一定數(shù)量的贊就結(jié)束,自己定義 while count: try: zan() # 調(diào)用點贊函數(shù) count -= 1 except TypeError: # 錯誤類型沒有也文圖不大,哈哈哈 pyautogui.scroll(-500) # 本頁沒有圖片后,滾動鼠標; print('沒有找到目標,屏幕下滾~') print("點10個贊結(jié)束!")
補充:Python實現(xiàn)鼠標自動控制到屏幕指定位置,并點擊
import pyautogui pyautogui.moveTo(0, 0, duration=1) pyautogui.click()
代碼解釋:
0, 0是鼠標需要移動到的位置,這邊是屏幕左上角的位置坐標
duration=1是將鼠標移動到指定坐標的間隔時間,這邊是1秒
pyautogui.click()是點擊
注:
屏幕的位置坐標點可以通過微信截圖看到坐標
總結(jié)
到此這篇關于python在屏幕上點擊特定按鈕或圖像效果的文章就介紹到這了,更多相關python屏幕上點擊按鈕或圖像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
搭建Python的Django框架環(huán)境并建立和運行第一個App的教程
時至今日Django仍然是人氣最高的Web開發(fā)框架,MVC結(jié)構(gòu)清晰內(nèi)置功能強大,這里我們就來共同學習搭建Python的Django框架環(huán)境并建立和運行第一個App的教程2016-07-07詳解在python操作數(shù)據(jù)庫中游標的使用方法
這篇文章主要介紹了在python操作數(shù)據(jù)庫中游標的使用方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11