1. 程式人生 > >Python 呼叫Sikuli Jar包

Python 呼叫Sikuli Jar包

Python 呼叫Sikuli -- Python

目錄

Sikuli簡介

Sikuli是由MIT(麻省理工學院) 研究團隊釋出的一種圖形化程式設計技術(程式設計小白的福音),使用Sikuli你只需要會寫HelloWorld這種最基本的程式設計技能即可,用Sikuli不需要去寫出一行行復雜的程式碼,而是用螢幕截圖的方式,用截出來的圖形元素組合出神奇的程式。

  1. Sikuli官網:http://slides.sikuli.org/
  2. API doc :http://nightly.sikuli.de/docs/index.html
  3. Sikuli是開源的,原始碼可在Github檢視:https://github.com/sikuli/sikuli

簡要說明

由於Python不能直接呼叫Java的方法,需要藉助一些第三方的庫,目前我瞭解到的有Jython、Jpype、Pyjnius等,本篇文章只對Jpype和Pyjnius呼叫Java jar包進行簡單介紹,好了,it`s show time。

環境設定

這邊介紹兩種Python呼叫Sikuli的方法,前置條件:

  1. 必須已經配置過Java環境,Java環境安裝:參考
  2. Python基礎環境已經安裝

第一種 – Jpype

  1. 首先安裝Jpype包:官網 開啟命令列輸入 pip install JPype1 進行安裝,會提示安裝成功
    在這裡插入圖片描述
    如果安裝失敗可能是Windows缺少VCForPython27導致,需要安裝這個元件,下載連結: https://pan.baidu.com/s/1ILVxjb3K4hMvviCbefpfIw 提取碼: 7uri ;如果下載後還安裝不了,就只能下載Jpype1的壓縮包進行安裝了,下載安裝包後,找到檔案所在的命令執行 pip install JPype1-0.6.3.tar.gz
  2. 安裝成功後下載sikuli的jar包,地址:https://raiman.github.io/SikuliX1/downloads.html,
    開啟連結,點選下載:在這裡插入圖片描述
    3.將下載的jar包放入到合適的檔案中,Jpype的環境已經可以了,你可以嘗試以一下,啟動桌面上的Chrome(執行程式碼時確保桌面上Chrome的圖示沒有被其他視窗遮擋,要不然會報錯的)。
	from jpype import *
	
	# 需安裝VCForPython27
	# C:\Program Files\Java\jdk1.8.0_181\jre\bin\server\jvm.dll
	print getDefaultJVMPath()
	startJVM(getDefaultJVMPath(), "-ea", r"-Djava.class.path=F:\work\project\test\sikuli_test\sikulixapi.jar")
	java.lang.System.out.println("hello world")
	Screen = JClass("org.sikuli.script.Screen")
	screen = Screen()
	# r"F:\work\project\test\sikuli_test\imgs\Chrome.png" 你擷取桌面上chrome圖示的圖片路徑
	screen.doubleClick(r"F:\work\project\test\sikuli_test\imgs\Chrome.png")
	shutdownJVM()

第二種 – Pyjnius

  1. 由於pyjnius依賴cython包,所以先進行安裝cython,開啟命令列進行安裝cython
	pip install cython
  1. 然後安裝pyjinus
	pip install pyjnius
  1. 安裝完成後,啟動桌面上的Chrome進行驗證
	import os
	
	# 將jvm.dll 的路徑加入系統變數,兩者加任意一個即可,
	# 也可以將其配置到系統變數中,就不必每次執行指令碼時設定了
	os.environ["path"] = r"C:\Program Files\Java\jdk1.8.0_131\jre\bin\server"
	os.environ["path"] = r"C:\Program Files\Java\jre1.8.0_131\bin\server"
	
	# 將sikuli的jar包引入到CLASSPATH中
	os.environ["CLASSPATH"] = r"F:\work\project\test\sikuli_test\sikulixapi.jar"
	from jnius import autoclass
	
	# 呼叫Java jar中的類
	Screen = autoclass("org.sikuli.script.Screen")
	s = Screen()
	s.doubleClick(r"F:\work\project\test\sikuli_test\imgs\Chrome.png")
  1. 具體sikuli的用法:參考,pyjnius:參考

結論

Python 呼叫Sikuli歸根結底還是Python呼叫Java類,以上的是Python呼叫Java的兩個簡單應用,其實在我們用Python(selenium、appium)進行自動化的時候,會遇到無法識別的元素就可以運用上面的兩種方式進行操作(也可以操作檔案上傳基於Python+selenium+sikuli,可參考上篇部落格:參考),可以把sikuli作為一個輔助工具來使用,不必安裝sikuli的環境儘可以呼叫,方便實用,不過不同的平臺可能圖片的識別率比較低。