sikulix的基本概念
sikulix是一种基于图像识别的自动化工具,允许用户通过屏幕截图来定位和操作图形用户界面(gui)元素。它结合了计算机视觉和脚本语言(如python或jython),能够模拟人类对图形界面的交互行为,如点击、输入、拖拽等。
sikulix的核心功能
图像识别与匹配
sikulix通过截取屏幕上的目标区域图像,将其作为模板进行匹配。匹配算法支持调整相似度阈值,以适应不同分辨率和界面变化。
跨平台支持
支持windows、macos和linux系统,能够在不同操作系统中实现统一的自动化操作。
脚本化操作
支持jython(python的java实现)脚本,允许用户编写复杂的逻辑流程。脚本可以调用sikulix提供的api,实现点击、输入、等待等操作。
集成开发环境(ide)
提供内置的sikulix ide,支持脚本编辑、调试和运行。用户可以直接在ide中截取屏幕区域并生成代码片段。
多语言支持
支持多种编程语言调用,包括java、python等。可以通过java的api将sikulix集成到其他自动化框架中。
典型应用场景
- gui自动化测试:对桌面应用或web应用进行功能测试,无需依赖底层代码。
- 重复性任务自动化:如批量文件处理、数据录入等。
- 游戏脚本:实现简单的游戏操作自动化,如自动点击或按键。
示例代码片段
from sikulix4java import screen
screen = screen()
# 点击匹配到的目标图像
screen.click("image.png")
# 在匹配到的区域输入文本
screen.type("image.png", "hello sikulix")
使用案例
使用python导入sikulixide库实现桌面图标识别达到自动化运行目的
1. 下载sikulixide库文件
从官方 github 仓库下载
访问 sikulix 的官方 github 发布页面:
https://github.com/raiman/sikulix1/releases
在页面中找到版本 2.0.5,展开 assets 部分,下载 sikulixide-2.0.5.jar 文件。
2. 下载java运行库
sikulixide需依赖于java运行库才能实现运行
访问oracle官方网站的java下载页面(https://www.oracle.com/java/technologies/javase-jre8-downloads.html)。选择适合操作系统的版本(windows、macos或linux),勾选接受许可协议后点击下载链接。安装时需管理员权限,按提示完成安装。
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 环境变量 os.environ['java_home'] = os.path.join(base_path, 'jre-image') # 构建 java 网关的完整路径 java_path = os.path.join(base_path, 'sikulixide-2.0.5.jar')
建立网关,连接两个功能库
# 异步启动 java 网关,指定端口号
try:
subprocess.popen(['java', '-jar', java_path, '-p', '25333'])
except exception as e:
print(f"failed to start java gateway: {e}")设置报警信息
网关通信正常后可正常使用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模块,后续的桌面图像操作需基于此屏幕变量进行
6. 设置屏幕操作功能函数
1. 屏幕图片单击操作功能函数
#双图片单击
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. 屏幕图片双击功能函数
#单图片双击
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. 文本输入功能函数
#文本输入函数
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. 移动鼠标位置功能函数
#移动鼠标位置
def move_mouse_to_center():
screen_width, screen_height = pyautogui.size()
pyautogui.moveto(screen_width / 2, screen_height / 2)
# 等待1秒
time.sleep(1)5. 适当的添加ui界面布局(tkinter)
directory_var = tk.stringvar(root)
tk.label(root, text="选择文件保存地址:").pack()
directory_entry = tk.entry(root, textvariable=directory_var)
directory_entry.pack()
# 修改按钮的命令,使其在点击时调用选择目录函数,并更新地址
directory_button = tk.button(root, text="浏览", command=lambda: directory_var.set(select_directory_wx()))
directory_button.pack()
#选择测试系统
tk.label(root, text="选择测试的系统版本:").pack()
system_var = tk.stringvar(value='tnc640')
system_menu = tk.optionmenu(root, system_var, 'tnc640', 'tnc7')
system_menu.pack()6. 程序结束后关闭java服务器
shutdownjvm()
注意事项
- 确保系统已安装 java 8 或更高版本以运行
.jar文件。 - 程序运行前确保java服务器与sikulixide库正常通讯
- 确认屏幕信息获取正常
- 该功能与pygui模块有重叠,但图像识别能力更强大
总结
到此这篇关于python调用sikulixide库实现自动化脚本的文章就介绍到这了,更多相关python调用sikulixide库自动化脚本内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论