python調(diào)用sikulixide庫(kù)實(shí)現(xiàn)自動(dòng)化腳本方法實(shí)例
SikuliX的基本概念
SikuliX是一種基于圖像識(shí)別的自動(dòng)化工具,允許用戶通過屏幕截圖來(lái)定位和操作圖形用戶界面(GUI)元素。它結(jié)合了計(jì)算機(jī)視覺和腳本語(yǔ)言(如Python或Jython),能夠模擬人類對(duì)圖形界面的交互行為,如點(diǎn)擊、輸入、拖拽等。
SikuliX的核心功能
圖像識(shí)別與匹配
SikuliX通過截取屏幕上的目標(biāo)區(qū)域圖像,將其作為模板進(jìn)行匹配。匹配算法支持調(diào)整相似度閾值,以適應(yīng)不同分辨率和界面變化。
跨平臺(tái)支持
支持Windows、macOS和Linux系統(tǒng),能夠在不同操作系統(tǒng)中實(shí)現(xiàn)統(tǒng)一的自動(dòng)化操作。
腳本化操作
支持Jython(Python的Java實(shí)現(xiàn))腳本,允許用戶編寫復(fù)雜的邏輯流程。腳本可以調(diào)用SikuliX提供的API,實(shí)現(xiàn)點(diǎn)擊、輸入、等待等操作。
集成開發(fā)環(huán)境(IDE)
提供內(nèi)置的SikuliX IDE,支持腳本編輯、調(diào)試和運(yùn)行。用戶可以直接在IDE中截取屏幕區(qū)域并生成代碼片段。
多語(yǔ)言支持
支持多種編程語(yǔ)言調(diào)用,包括Java、Python等??梢酝ㄟ^Java的API將SikuliX集成到其他自動(dòng)化框架中。
典型應(yīng)用場(chǎng)景
- GUI自動(dòng)化測(cè)試:對(duì)桌面應(yīng)用或Web應(yīng)用進(jìn)行功能測(cè)試,無(wú)需依賴底層代碼。
- 重復(fù)性任務(wù)自動(dòng)化:如批量文件處理、數(shù)據(jù)錄入等。
- 游戲腳本:實(shí)現(xiàn)簡(jiǎn)單的游戲操作自動(dòng)化,如自動(dòng)點(diǎn)擊或按鍵。
示例代碼片段
from sikulix4java import Screen
screen = Screen()
# 點(diǎn)擊匹配到的目標(biāo)圖像
screen.click("image.png")
# 在匹配到的區(qū)域輸入文本
screen.type("image.png", "Hello SikuliX")
使用案例
使用python導(dǎo)入sikulixide庫(kù)實(shí)現(xiàn)桌面圖標(biāo)識(shí)別達(dá)到自動(dòng)化運(yùn)行目的
1. 下載sikulixide庫(kù)文件
從官方 GitHub 倉(cāng)庫(kù)下載
訪問 SikuliX 的官方 GitHub 發(fā)布頁(yè)面:
https://github.com/RaiMan/SikuliX1/releases
在頁(yè)面中找到版本 2.0.5,展開 Assets 部分,下載 sikulixide-2.0.5.jar 文件。
2. 下載JAVA運(yùn)行庫(kù)
sikulixide需依賴于java運(yùn)行庫(kù)才能實(shí)現(xiàn)運(yùn)行
訪問Oracle官方網(wǎng)站的Java下載頁(yè)面(https://www.oracle.com/java/technologies/javase-jre8-downloads.html)。選擇適合操作系統(tǒng)的版本(Windows、macOS或Linux),勾選接受許可協(xié)議后點(diǎn)擊下載鏈接。安裝時(shí)需管理員權(quán)限,按提示完成安裝。
3. 正確導(dǎo)入模塊
from jpype import * from sikulix4python import *
4. 在python腳本中正確設(shè)置sikulixide庫(kù)以及JAVA運(yùn)行庫(kù)的文件位置
# 獲取當(dāng)前運(yùn)行的臨時(shí)目錄 base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) # 設(shè)置 JAVA_HOME 環(huán)境變量 os.environ['JAVA_HOME'] = os.path.join(base_path, 'jre-image') # 構(gòu)建 Java 網(wǎng)關(guān)的完整路徑 java_path = os.path.join(base_path, 'sikulixide-2.0.5.jar')
建立網(wǎng)關(guān),連接兩個(gè)功能庫(kù)
# 異步啟動(dòng) Java 網(wǎng)關(guān),指定端口號(hào)
try:
subprocess.Popen(['java', '-jar', java_path, '-p', '25333'])
except Exception as e:
print(f"Failed to start Java gateway: {e}")設(shè)置報(bào)警信息
網(wǎng)關(guān)通信正常后可正常使用sikulixide庫(kù)功能
5. 設(shè)置窗口信息
classpath = os.path.join(os.getcwd(), "sikulixapi-2.0.5-win.jar")
startJVM(getDefaultJVMPath(), "-ea", f"-Djava.class.path={classpath}")
#java.lang.System.out.#println("------------------------------------------- \n")
Screen = JClass("org.sikuli.script.Screen")
screen = Screen()同python中的pygui模塊,后續(xù)的桌面圖像操作需基于此屏幕變量進(jìn)行
6. 設(shè)置屏幕操作功能函數(shù)
1. 屏幕圖片單擊操作功能函數(shù)
#雙圖片單擊
def auto_click_image2(image_path1, image_path2, similarity=1.0):
if screen.exists(image_path1, timeout=3, similarity=similarity):
screen.click(image_path1)
elif screen.exists(image_path2, timeout=3, similarity=similarity):
screen.click(image_path2)
#else:
#print(f"{image_path1} 和 {image_path2} 均未找到")2. 屏幕圖片雙擊功能函數(shù)
#單圖片雙擊
def auto_doubleclick_image(image_path, similarity=1.0):
if screen.exists(image_path, timeout=3, similarity=similarity):
screen.doubleClick(image_path)
#else:
#print(f"{image_path} 未找到")3. 文本輸入功能函數(shù)
#文本輸入函數(shù)
def type_on_screen(img, text):
match = screen.exists(img, 3.0) # number must be float/double
if match:
match.click() # 模擬鼠標(biāo)單擊
match.type(text) # 模擬定位并輸入文本4. 移動(dòng)鼠標(biāo)位置功能函數(shù)
#移動(dòng)鼠標(biāo)位置
def move_mouse_to_center():
screen_width, screen_height = pyautogui.size()
pyautogui.moveTo(screen_width / 2, screen_height / 2)
# 等待1秒
time.sleep(1)5. 適當(dāng)?shù)奶砑覷I界面布局(tkinter)
directory_var = tk.StringVar(root)
tk.Label(root, text="選擇文件保存地址:").pack()
directory_entry = tk.Entry(root, textvariable=directory_var)
directory_entry.pack()
# 修改按鈕的命令,使其在點(diǎn)擊時(shí)調(diào)用選擇目錄函數(shù),并更新地址
directory_button = tk.Button(root, text="瀏覽", command=lambda: directory_var.set(select_directory_wx()))
directory_button.pack()
#選擇測(cè)試系統(tǒng)
tk.Label(root, text="選擇測(cè)試的系統(tǒng)版本:").pack()
system_var = tk.StringVar(value='TNC640')
system_menu = tk.OptionMenu(root, system_var, 'TNC640', 'TNC7')
system_menu.pack()6. 程序結(jié)束后關(guān)閉java服務(wù)器
shutdownJVM()
注意事項(xiàng)
- 確保系統(tǒng)已安裝 Java 8 或更高版本以運(yùn)行
.jar文件。 - 程序運(yùn)行前確保java服務(wù)器與sikulixide庫(kù)正常通訊
- 確認(rèn)屏幕信息獲取正常
- 該功能與pyGUI模塊有重疊,但圖像識(shí)別能力更強(qiáng)大
總結(jié)
到此這篇關(guān)于python調(diào)用sikulixide庫(kù)實(shí)現(xiàn)自動(dòng)化腳本的文章就介紹到這了,更多相關(guān)python調(diào)用sikulixide庫(kù)自動(dòng)化腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
python攻防-破解附近局域網(wǎng)WIFI密碼實(shí)現(xiàn)上網(wǎng)自由
本文將記錄學(xué)習(xí)如何通過 Python 腳本實(shí)破解附近局域網(wǎng) WIFI 密碼的暴力破解,隨時(shí)隨地免費(fèi)蹭網(wǎng),再也不被WiFi密碼困擾,實(shí)現(xiàn)蹭網(wǎng)自由2021-08-08
Django 解決model 反向引用中的related_name問題
這篇文章主要介紹了Django 解決model 反向引用中的related_name問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-05-05
PyCharm 創(chuàng)建指定版本的 Django(超詳圖解教程)
這篇文章主要介紹了PyCharm 創(chuàng)建指定版本的 Django,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-06-06

