python | lackey库实践 | 匹配多张截图(原神【游戏公告】自动点击,消除小红点)
鼠标键盘完全自动化,所以鼠标轨迹都是直线的,显得很僵硬。当前程序涉及的库import time # 用于延迟处理,由于网络波动页面加载需要一定的时间,可用延迟加载的处理方式import keyboard # 用于原神当中打开页面使用,像Esc可以从主界面进入到个人主页,Enter可以实现拍照# Ctrl+H 实现拍照全屏import lackey # 实现按钮锁定,根据截图在屏幕中锁定位置,之后可
·
做自动化的时候,比较常见的一种场景
上面这个列表,我们需要鼠标去点击每个锁定标题,当然可以直接点击黄色15¥,黄色15¥和黄色20¥,相似度应该在0.7左右但是算是匹配成功的。
做法可以是:
先截取一张模板
然后在最开始的一张截图去锁定,代码如下
# png_path 截图模板 就是上图中的15¥
png_path = r'E:\python\auto_exe\yuanshen\photo\ico_1.png'
# 当前屏幕。就是最开始的一张图
screen = lackey.Screen()
# findAll 在screen当中寻找所有符合的项目。
ico_1_list = list(screen.findAll(png_path))
# 循环点击
if len(ico_1_list) != 0:
for index in range(len(ico_1_list)):
screen.click(ico_1_list[index])
time.sleep(1)
当然上面的只是一部分,像原神的游戏公告自动化点击,消除小红点是下面代码完成的,不可直接复制粘贴,因为缺少截图。完整程序包请直接访问百度网盘下载,更改原神的启动路径即可。
效果如下:由于版权原因,上传视频和程序包都失败,视频最后上传到小破站了,程序包上传到百度云网盘了,有兴趣的话可以看下。
python | 第1集 实现自动化拍照,自动化点击游戏公告,消除小红点
https://www.bilibili.com/video/BV1qe4y1H7Nd/?vd_source=74491db4ef604fb16ac63f32db8f3abf
百度云网盘:
链接:https://pan.baidu.com/s/1395qW18qU6tpTo8exQ7oLg
提取码:1ski
import time
import keyboard
from lackey import Button, Match
from pywinauto import mouse
from PIL import ImageGrab
import pywinauto
"""
2022年9月25日19:47:10
当前版本需要先获取一个screen
screen = lackey.Screen()
account_png = lackey.Pattern(r'E:\python\auto_exe\photo\account.png')
screen.click(account_png)
screen.type('123456')
"""
import lackey
# 尝试重新点击一个按钮
def try_click_again(png_path='', massage='', press_alt=False):
error_count = 120
while True:
error_count = error_count - 1
try:
screen = lackey.Screen()
click_png = lackey.Pattern(png_path)
if press_alt:
keyboard.press("Alt")
time.sleep(2)
screen.click(click_png)
print(massage + " success!")
time.sleep(15)
pic = ImageGrab.grab()
pic.save(massage + ".jpg")
if press_alt:
keyboard.release("Alt")
break
except Exception as e:
# 表示当前屏幕没有需要截图的像素
time.sleep(1)
print(e.args[0] + "\n" + massage + ", try to click again ...\n")
if error_count == 0:
print(massage + ',try to click again fail,will exit...')
exit()
# 主页
def main_page():
# 点击人头
# try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\left_1.png',
# massage='click click in(点击主页,左上角的人头)', press_alt=True)
time.sleep(10)
keyboard.press_and_release("Esc")
time.sleep(10)
# 拍照
def main_page_photo():
# 点击拍照
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\photo.png',
massage='click click in(打开主页后,点击拍照按钮)')
# 按键Enter
keyboard.parse_hotkey("Ctrl+H")
time.sleep(10)
keyboard.press_and_release("Enter")
# 点击保存
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\save.png',
massage='click click in(点击保存按钮)')
# 点击退出
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\exit.png',
massage='click click in(点击退出按钮)')
# 点击退出(二次退出)
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\exit.png',
massage='click click in(点击退出(二次退出)按钮)')
# 公告
def main_page_advs():
# 点击公告按钮
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\advs.png',
massage='click click in(打开主页后,点击公告按钮)')
# 点击游戏公告
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\game_advs.png',
massage='click click in(点击游戏公告)')
# 游戏公告的小红点
while True:
png_path = r'E:\python\auto_exe\yuanshen\photo\ico_1.png'
screen = lackey.Screen()
ico_1_list = list(screen.findAll(png_path))
if len(ico_1_list) != 0:
for index in range(len(ico_1_list)):
screen.click(ico_1_list[index])
time.sleep(1)
# 结束条件
try:
screen = lackey.Screen()
click_png = lackey.Pattern(r'E:\python\auto_exe\yuanshen\photo\game_advs_end.png')
screen.click(click_png)
break
except Exception as e:
print(e.args[0] + "\n未定位到【公平运营声明】公告,结束条件不满足")
mouse.scroll(coords=(270, 415), wheel_dist=-1)
print("鼠标滚动!")
# 点击活动公告
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\active_advs.png',
massage='click click in(点击游戏公告)')
# 活动公告的小红点
while True:
png_path = r'E:\python\auto_exe\yuanshen\photo\ico_1.png'
screen = lackey.Screen()
ico_1_list = list(screen.findAll(png_path))
if len(ico_1_list) != 0:
for index in range(len(ico_1_list)):
screen.click(ico_1_list[index])
time.sleep(1)
# 结束条件
time.sleep(1)
try:
screen = lackey.Screen()
click_png = lackey.Pattern(r'E:\python\auto_exe\yuanshen\photo\active_exit.png')
screen.click(click_png)
break
except Exception as e:
print(e.args[0] + "\n未定位到【神铸赋形】公告,结束条件不满足")
mouse.scroll(coords=(270, 415), wheel_dist=-1)
print("鼠标滚动!")
# 邮件
def main_page_email():
# 点击邮件按钮
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\email.png',
massage='click click in(打开主页后,点击邮件按钮)')
# 检查 是不是没有邮件
screen = lackey.Screen()
ico_1_list = list(screen.findAll(r'E:\python\auto_exe\yuanshen\photo\no_email.png'))
if len(ico_1_list) != 0:
# 点击退出
keyboard.press_and_release("Esc")
time.sleep(5)
# 直接点击Esc 回到主屏幕
keyboard.press_and_release("Esc")
return
# 点击 已读邮件删除
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\delete_read_finish.png',
massage='click click in(点击删除已读按钮')
# 点击 确认按钮
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\yes.png',
massage='click click in(点击 确认删除按钮')
# 点击全部领取
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\all_get.png',
massage='click click in(点击【全部领取】按钮)')
# 点击左键
mouse.press(Button.LEFT)
time.sleep(5)
keyboard.press_and_release("Esc")
time.sleep(5)
# 直接点击Esc 回到主屏幕
keyboard.press_and_release("Esc")
time.sleep(5)
# 调整时间
def main_page_adjust_time():
# 点击调整时间
try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\email.png',
massage='click click in(打开主页后,点击调整时间)')
# 调整时间
def run(mihoyo_path=''):
# 打开米哈游程序
# if r'\Genshin Impact\launcher.exe' not in mihoyo_path:
# print("打开【米哈游】失败,请检查输入路径!")
# return
# # Application 需要指定参数
# pywinauto.Application(backend='win32').start(cmd_line=mihoyo_path)
# # 点击【开始游戏】
# try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\start_game.png', massage='click start game(进入游戏)')
#
# # 点击【点击进入】
# try_click_again(png_path=r'E:\python\auto_exe\yuanshen\photo\click_in.png', massage='click click in(点击进入)')
#
# # 点击【左上角的人头】
# main_page()
#
# # 拍照
# main_page_photo()
# 点击【左上角的人头】
main_page()
# 点击公告
main_page_email()
if __name__ == '__main__':
run(mihoyo_path=r'D:\yuanshen\Genshin Impact\launcher.exe')
当前程序涉及的库
import time # 用于延迟处理,由于网络波动页面加载需要一定的时间,可用延迟加载的处理方式
import keyboard # 用于原神当中打开页面使用,像Esc可以从主界面进入到个人主页,Enter可以实现拍照 Ctrl+H 实现拍照全屏
import lackey # 实现按钮锁定,根据截图在屏幕中锁定位置,之后可以进行点击
import pywinauto # 实现自动化打开exe程序
from PIL import ImageGrab # 实现屏幕截图,有时候你锁定不到你的截图,可以在报错的时候截图,查看当时锁定时刻的屏幕是什么样的,用于排查问题。
#注:
# 程序已上传到百度云,csdn资源无法上传。
# 程序不可直接使用,需要修改原神exe的加载位置
# 为什么不把程序打包成exe让别人直接用呢
这种风险很大,你并不知道我exe程序中到底写的程序是怎么样的,万一是个后台进程记录你的个人隐私,
在通过网络传输给我呢,所以一般没有经过认证的exe不要直接使用。
# 所以自己可以打包 然后自己使用。
更多推荐
已为社区贡献2条内容
所有评论(0)