问题
在之前文档中
梦幻西游手游5开自动化挖藏宝图–5
多开时,通过桌面全局查询藏宝图时,概率出现不能识别藏宝图图标。
环境
环境:在PC端通过梦幻西游时空,实现5开
自动化环境搭建,查看之前的文章
软件:
pycharm
python 3.0以上
airtest
思路
通过获取梦幻西游窗口句柄,然后一一对窗口内藏宝图图标进行识别。
正文
1.获取句柄
def get_mhxy_all_hwnd(title="梦幻西游"):
'''
获取窗口标题中含有title字段的句柄
:param title: 默认值为“梦幻西游”
:return:
'''
title
# 根据句柄,最小化
hwnd_list = []
win32gui.EnumWindows(lambda hwnd, param: param.append(hwnd), hwnd_list)
for hwnd in hwnd_list:
title = win32gui.GetWindowText(hwnd)
if (title.find(title)>= 0):
print("句柄:", hwnd, "标题:", title)
hwnd_list.append(hwnd)
return hwnd
2.获取核心代码
通过airtest软件,获取识别和点击藏宝图代码
2.1 连接设备
1)打开airtest软件,在windows窗口中点击 选择游戏画面,选择任意一个梦幻西游窗口
2)使用藏宝网,使进入如下界面
3).点击touch,与wait框选的区域中,再框选需要点击的区域,”使用“,结果如下图:
4).找到airtest存放的脚本路径,应当有2张图片和1个.py文件
5).用记事本打开.py文件,记住现在airtest进行保存。
最近实测发现,需要在代码上点击坐标时,需要加上随机值,不然会被监控。
pos = wait() #获取点击的坐标
touch((pos[0]+randmon,pos[1]+randmon),times=2) #具体随机方法,可以百度查询。横着坐标范围大些,纵坐标范围适当小些,避免点击不到控件。
2.2 挖藏宝图方法
找到airtest存放的脚本路径,应当有2张图片,放到与脚本相同路径下。否则将提示找到png文件
2.3主函数
def run_cangbaotu(couter):
'''
:param couter: 每个窗口执行次数
:return:
'''
hwnds = get_mhxy_all_hwnd(title="梦幻西游")
for i in range(couter):
for j in range(len(hwnds)):
cangbaotu(hwnds[j])
sleep(5)
if __name__ == '__main__':
run_cangbaotu(20) #20表示每个窗口执行20次