最近因为写一个网页游戏自动化登录并签到的python脚本而头疼,麻烦之处在于游戏布置在画布上,无法通过元素进行定位,后续的点击操作也就无从谈起。所幸后来了解到有sikuli这样一个第三方库,借助其图像识别功能可以解决定位问题。(顺带说一句,也可以通过坐标定位的方式模拟js执行来解决网页中画布元素操作的问题)。
这里记录一下通过图像识别定位实现自动化的工具和环境配置:
- sikuli下载下来应该是一个jar包(我用的sikulixide-2.0.5.jar),配置jdk环境后(我在win11上8.0版本 )可以直接打开作为客户端使用,但是需要将其配置在javapath文件夹下,否则脚本执行失败。如果需要通过python调用,也是需要下载sikulixide.jar包:
SikuliX Downloadshttps://raiman.github.io/SikuliX1/downloads.html
然后在Pycharm中通过
pip install py4j 安装java调用库以调用下载的jar程序
然后cmd中通过
java -jar path-to/sikulixide.jar -p 来开启服务
下载sikulix4python目录放到你的python工程中,和script同级即可(IDE是Pycharm)
GitHub - RaiMan/sikulix4python: Use SikuliX from real Python via py4j
from sikulix4python import * #此方法需要配合java开启服务
Import py4j
#make images available in the folder of the script
addImagePath() #这样才能保证截图的目标识别图像所在路径有效,否则无法访问截图图像
screen=Screen() #实例化
screen.click("D:\\pythonProject1\\pic\\test.png")
下面给出更详细的源码,作为一个框架,设计思路是使用者将要依次操作的目标图像截图并保存到指定文件夹下。并依次命名为1.png、2.png,...(也可以根据需要不这么做)。脚本执行时读取该文件夹下的所有png文件,并进行需要的操作:
from sikulix4python import *
import py4j
# java -jar "E:\sikulixide-2.0.5.jar" -p
import glob
addImagePath("E:\AutoOffice\venv") #括号内应该填入图像所在文件夹
scr=Screen()
file_out_dir = r'E:\AutoOffice\venv\test_png\\'
id_file = file_out_dir + '*.png'
#几个文件
len_file = len(glob.glob(id_file))
# print(len_file)
#遍历文件路径
# print(glob.glob(id_file))
for img in glob.glob(id_file):
print(img)
match = scr.exists(img, 3.) # method missing, wrong signature
match = scr.exists(img, 3.0) # number must be float/double
if match:
# match.highlight(2)
match.click() #模拟鼠标单击
match.type(img,"lilili\n\n") #模拟定位并输入文本,默认是英文
有了这个,个人的办公自动化就会变得很容易了,当然有个前提,就是自动化执行时候得是显式可见的,很难再操作其他事情。