python調(diào)用sikulixide庫實現(xiàn)自動化腳本方法實例
SikuliX的基本概念
SikuliX是一種基于圖像識別的自動化工具,允許用戶通過屏幕截圖來定位和操作圖形用戶界面(GUI)元素。它結(jié)合了計算機視覺和腳本語言(如Python或Jython),能夠模擬人類對圖形界面的交互行為,如點擊、輸入、拖拽等。
SikuliX的核心功能
圖像識別與匹配
SikuliX通過截取屏幕上的目標區(qū)域圖像,將其作為模板進行匹配。匹配算法支持調(diào)整相似度閾值,以適應不同分辨率和界面變化。
跨平臺支持
支持Windows、macOS和Linux系統(tǒng),能夠在不同操作系統(tǒng)中實現(xiàn)統(tǒng)一的自動化操作。
腳本化操作
支持Jython(Python的Java實現(xiàn))腳本,允許用戶編寫復雜的邏輯流程。腳本可以調(diào)用SikuliX提供的API,實現(xiàn)點擊、輸入、等待等操作。
集成開發(fā)環(huán)境(IDE)
提供內(nèi)置的SikuliX IDE,支持腳本編輯、調(diào)試和運行。用戶可以直接在IDE中截取屏幕區(qū)域并生成代碼片段。
多語言支持
支持多種編程語言調(diào)用,包括Java、Python等??梢酝ㄟ^Java的API將SikuliX集成到其他自動化框架中。
典型應用場景
- GUI自動化測試:對桌面應用或Web應用進行功能測試,無需依賴底層代碼。
- 重復性任務自動化:如批量文件處理、數(shù)據(jù)錄入等。
- 游戲腳本:實現(xiàn)簡單的游戲操作自動化,如自動點擊或按鍵。
示例代碼片段
from sikulix4java import Screen
screen = Screen()
# 點擊匹配到的目標圖像
screen.click("image.png")
# 在匹配到的區(qū)域輸入文本
screen.type("image.png", "Hello SikuliX")
使用案例
使用python導入sikulixide庫實現(xiàn)桌面圖標識別達到自動化運行目的
1. 下載sikulixide庫文件
從官方 GitHub 倉庫下載
訪問 SikuliX 的官方 GitHub 發(fā)布頁面:
https://github.com/RaiMan/SikuliX1/releases
在頁面中找到版本 2.0.5,展開 Assets 部分,下載 sikulixide-2.0.5.jar 文件。
2. 下載JAVA運行庫
sikulixide需依賴于java運行庫才能實現(xiàn)運行
訪問Oracle官方網(wǎng)站的Java下載頁面(https://www.oracle.com/java/technologies/javase-jre8-downloads.html)。選擇適合操作系統(tǒng)的版本(Windows、macOS或Linux),勾選接受許可協(xié)議后點擊下載鏈接。安裝時需管理員權限,按提示完成安裝。
3. 正確導入模塊
from jpype import * from sikulix4python import *
4. 在python腳本中正確設置sikulixide庫以及JAVA運行庫的文件位置
# 獲取當前運行的臨時目錄 base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) # 設置 JAVA_HOME 環(huán)境變量 os.environ['JAVA_HOME'] = os.path.join(base_path, 'jre-image') # 構(gòu)建 Java 網(wǎng)關的完整路徑 java_path = os.path.join(base_path, 'sikulixide-2.0.5.jar')
建立網(wǎng)關,連接兩個功能庫
# 異步啟動 Java 網(wǎng)關,指定端口號
try:
subprocess.Popen(['java', '-jar', java_path, '-p', '25333'])
except Exception as e:
print(f"Failed to start Java gateway: {e}")設置報警信息
網(wǎng)關通信正常后可正常使用sikulixide庫功能
5. 設置窗口信息
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ù)的桌面圖像操作需基于此屏幕變量進行
6. 設置屏幕操作功能函數(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() # 模擬鼠標單擊
match.type(text) # 模擬定位并輸入文本4. 移動鼠標位置功能函數(shù)
#移動鼠標位置
def move_mouse_to_center():
screen_width, screen_height = pyautogui.size()
pyautogui.moveTo(screen_width / 2, screen_height / 2)
# 等待1秒
time.sleep(1)5. 適當?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ào)用選擇目錄函數(shù),并更新地址
directory_button = tk.Button(root, text="瀏覽", command=lambda: directory_var.set(select_directory_wx()))
directory_button.pack()
#選擇測試系統(tǒng)
tk.Label(root, text="選擇測試的系統(tǒng)版本:").pack()
system_var = tk.StringVar(value='TNC640')
system_menu = tk.OptionMenu(root, system_var, 'TNC640', 'TNC7')
system_menu.pack()6. 程序結(jié)束后關閉java服務器
shutdownJVM()
注意事項
- 確保系統(tǒng)已安裝 Java 8 或更高版本以運行
.jar文件。 - 程序運行前確保java服務器與sikulixide庫正常通訊
- 確認屏幕信息獲取正常
- 該功能與pyGUI模塊有重疊,但圖像識別能力更強大
總結(jié)
到此這篇關于python調(diào)用sikulixide庫實現(xiàn)自動化腳本的文章就介紹到這了,更多相關python調(diào)用sikulixide庫自動化腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python實現(xiàn)PDF中表格轉(zhuǎn)化為Excel的方法
這篇文章主要為大家詳細介紹了python實現(xiàn)PDF中表格轉(zhuǎn)化為Excel的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06
golang/python實現(xiàn)歸并排序?qū)嵗a
這篇文章主要給大家介紹了關于golang/python實現(xiàn)歸并排序的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08
Python3 利用requests 庫進行post攜帶賬號密碼請求數(shù)據(jù)的方法
今天小編就為大家分享一篇Python3 利用requests 庫進行post攜帶賬號密碼請求數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
python+logging+yaml實現(xiàn)日志分割
這篇文章主要為大家詳細介紹了python+logging+yaml實現(xiàn)日志分割,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07

