当前位置:
首页 > Python基础教程 >
-
python pyautogui实现图片识别点击失败后重试功能
这篇文章主要介绍了python pyautogui实现图片识别点击失败后重试效果,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
安装库
pip install Pillow
pip install opencv-python
confidence作用
confidence 参数是用于指定图像匹配的信度(或置信度)的,它表示图像匹配的准确程度。这个参数的值在 0 到 1 之间,数值越高表示匹配的要求越严格。
具体来说,confidence 参数用于调整在屏幕上搜索目标图像时的匹配精度:
0.0 表示完全不匹配。
1.0 表示完全匹配。
在实际应用中,图像匹配的信度可以帮助你处理一些图像上的细微差异。例如,屏幕上的图像可能因为分辨率、光线、颜色等原因与原始图像有些不同。通过调整 confidence 参数,你可以设置一个合理的阈值,使得图像匹配过程既不太严格(导致找不到图像),也不太宽松(导致误匹配)。
举个例子,如果你设置 confidence=0.8,那么只有当屏幕上的图像与目标图像的相似度达到 80% 以上时,才会被认为是匹配的。
识别图片点击
import pyautogui
import time
import os
def locate_and_click_image(image_path, retry_interval=2, max_retries=5, click_count=1, confidence=None):
"""
定位图片并点击指定次数。
:param image_path: 图片路径
:param retry_interval: 重试间隔时间(秒)
:param max_retries: 最大重试次数
:param click_count: 点击次数
:param confidence: 图像匹配的信度(0到1之间),需要安装 OpenCV
:return: 图片的位置 (x, y, width, height) 或 None(如果未找到)
"""
if not os.path.isfile(image_path):
print(f"错误:图片路径无效或文件不存在: {image_path}")
return None
retries = 0
while retries < max_retries:
try:
if confidence is not None:
location = pyautogui.locateOnScreen(image_path, confidence=confidence)
else:
location = pyautogui.locateOnScreen(image_path)
if location is not None:
print(f"找到图片: {image_path},位置: {location}")
center = pyautogui.center(location)
for _ in range(click_count):
pyautogui.click(center)
print(f"点击图片中心位置。点击次数:{_ + 1}")
return location
else:
print(f"未找到图片: {image_path},{retry_interval}秒后重试...(重试次数: {retries + 1}/{max_retries})")
time.sleep(retry_interval)
retries += 1
except pyautogui.ImageNotFoundException:
print(f"未找到图片: {image_path},{retry_interval}秒后重试...(重试次数: {retries + 1}/{max_retries})")
time.sleep(retry_interval)
retries += 1
print(f"达到最大重试次数: {max_retries},未找到图片: {image_path}")
return None
def main():
image_path = '1.png' # 替换为你的图片路径
retry_interval = 2
max_retries = 5
click_count = 1
confidence = 0.8 # 如果不使用 OpenCV,请将此参数设置为 None
location = locate_and_click_image(image_path, retry_interval, max_retries, click_count, confidence)
if location:
print("操作完成。")
else:
print("未能定位到图片,程序结束。")
if __name__ == "__main__":
locate_and_click_image('1.png', retry_interval=2, max_retries=5, click_count=2, confidence=0.8)
优化代码,识别多张图片并点击
import pyautogui
import time
import os
def locate_and_click_image(path, retry_interval=2, max_retries=5, click_count=1, confidence=None):
if not os.path.isfile(path):
print(f"错误:图片路径无效或文件不存在: {path}")
return None
retries = 0
while retries < max_retries:
try:
if confidence is not None:
location = pyautogui.locateOnScreen(path, confidence=confidence)
else:
location = pyautogui.locateOnScreen(path)
if location is not None:
print(f"找到图片: {path},位置: {location}")
center = pyautogui.center(location)
for _ in range(click_count):
pyautogui.click(center)
print(f"点击图片中心位置。点击次数:{_ + 1}")
return location
else:
print(f"未找到图片: {path},{retry_interval}秒后重试...(重试次数: {retries + 1}/{max_retries})")
time.sleep(retry_interval)
retries += 1
except pyautogui.ImageNotFoundException:
print(f"未找到图片: {path},{retry_interval}秒后重试...(重试次数: {retries + 1}/{max_retries})")
time.sleep(retry_interval)
retries += 1
print(f"达到最大重试次数: {max_retries},未找到图片: {path}")
return None
def main():
images = [
{'path': '1.png', 'retry_interval': 2, 'max_retries': 5, 'click_count': 1, 'confidence': 0.8},
{'path': '3.png', 'retry_interval': 2, 'max_retries': 5, 'click_count': 1, 'confidence': 0.8},
# 添加更多图片
]
for image in images:
location = locate_and_click_image(**image)
if location:
print(f"图片 {image['path']} 操作完成。")
else:
print(f"未能定位到图片 {image['path']},程序结束。")
if __name__ == "__main__":
main()
优化代码,识别多张图片,只要识别到图片就结束循环
import pyautogui
import time
import os
def locate_and_click_image(path, retry_interval=2, max_retries=5, click_count=1, confidence=None):
if not os.path.isfile(path):
print(f"错误:图片路径无效或文件不存在: {path}")
return None
retries = 0
while retries < max_retries:
try:
if confidence is not None:
location = pyautogui.locateOnScreen(path, confidence=confidence)
else:
location = pyautogui.locateOnScreen(path)
if location is not None:
print(f"找到图片: {path},位置: {location}")
center = pyautogui.center(location)
for _ in range(click_count):
pyautogui.click(center)
print(f"点击图片中心位置。点击次数:{_ + 1}")
return True
else:
print(f"未找到图片: {path},{retry_interval}秒后重试...(重试次数: {retries + 1}/{max_retries})")
time.sleep(retry_interval)
retries += 1
except pyautogui.ImageNotFoundException:
print(f"未找到图片: {path},{retry_interval}秒后重试...(重试次数: {retries + 1}/{max_retries})")
time.sleep(retry_interval)
retries += 1
print(f"达到最大重试次数: {max_retries},未找到图片: {path}")
return False
def main():
images = [
{'path': '1.png', 'retry_interval': 2, 'max_retries': 5, 'click_count': 1, 'confidence': 0.8},
{'path': '3.png', 'retry_interval': 2, 'max_retries': 5, 'click_count': 1, 'confidence': 0.8},
{'path': '4.png', 'retry_interval': 2, 'max_retries': 5, 'click_count': 1, 'confidence': 0.8},
# 添加更多图片
]
for image in images:
success = locate_and_click_image(**image)
if success:
print(f"图片 {image['path']} 操作完成。")
break
else:
print(f"未能定位到图片 {image['path']}。")
if __name__ == "__main__":
main()
到此这篇关于python pyautogui实现图片识别点击失败后重试的文章就介绍到这了,更多相关python pyautogui图片识别失败内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持
原文链接:https://blog.csdn.net/qq_26086231/article/details/139871032
栏目列表
最新更新
vbscript基础篇 - vbs数组Array的定义与使用方
vbscript基础篇 - vbs变量定义与使用方法
vbs能调用的系统对象小结
vbscript网页模拟登录效果代码
VBScript 根据IE窗口的标题输出ESC
杀死指定进程名称的小VBS
通过vbs修改以点结尾的文件的属性为隐藏
查询电脑开关机时间的vbs代码
VBA中的Timer函数用法
ComboBox 控件的用法教程
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比