首页 > 编程语言 >Python实现图片定位与自动输入文字

Python实现图片定位与自动输入文字

时间:2024-11-20 12:45:00浏览次数:3  
标签:pyautogui 定位 Python matches match template print 输入 图片

简介

本文介绍如何使用Python实现在屏幕上定位特定图片,并在目标位置自动输入文字的功能。主要使用OpenCV进行图像识别,PyAutoGUI实现鼠标控制和键盘输入。

主要功能

  1. 在屏幕上查找指定图片位置
  2. 自动移动鼠标到目标位置
  3. 模拟鼠标点击
  4. 自动输入中文文字

技术要点

1. 图片定位

使用OpenCV的模板匹配功能,通过cv2.matchTemplate()函数在屏幕截图中查找目标图片。匹配度阈值设为0.7,可根据实际需求调整。

2. 屏幕操作

  • 使用ImageGrab获取屏幕截图
  • 使用pyautogui控制鼠标移动和点击
  • 设置FAILSAFE = True启用PyAutoGUI的安全机制

3. 中文输入

通过剪贴板实现中文输入:

  1. 将文字复制到剪贴板
  2. 使用Ctrl+V模拟粘贴操作

使用说明

环境准备

pip install opencv-python
pip install pyautogui
pip install pillow
pip install numpy
pip install pyperclip

使用步骤

  1. 准备要查找的目标图片(test.png)
  2. 运行程序
  3. 程序会自动查找图片位置并执行点击和输入操作

注意事项

  1. 确保目标图片清晰可见
  2. 图片匹配阈值可根据需要调整
  3. 建议在执行自动操作前关闭输入法

完整代码

import cv2
import numpy as np
import pyautogui
import time
from PIL import ImageGrab
import pyperclip

def type_chinese_text(text):
    """使用剪贴板输入中文"""
    pyperclip.copy(text)  # 复制到剪贴板
    pyautogui.hotkey('ctrl', 'v')  # 粘贴

def find_image_on_screen(template_path, threshold=0.7):
    """在屏幕上查找指定图片的位置"""
    try:
        # 读取模板图片
        template = cv2.imread(template_path)
        template_height, template_width = template.shape[:2]
        
        # 截取整个屏幕
        screen = np.array(ImageGrab.grab())
        screen = cv2.cvtColor(screen, cv2.COLOR_RGB2BGR)
        
        # 模板匹配
        result = cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED)
        locations = np.where(result >= threshold)
        
        matches = []
        for pt in zip(*locations[::-1]):
            matches.append({
                'left': pt[0],
                'top': pt[1],
                'width': template_width,
                'height': template_height,
                'confidence': result[pt[1], pt[0]]
            })
        
        matches.sort(key=lambda x: x['confidence'], reverse=True)
        return matches
        
    except Exception as e:
        print(f"查找图片时发生错误: {e}")
        return []

def interact_with_image(matches, text_to_type="你好"):
    """移动到图片位置并输入文字"""
    if not matches:
        print("未找到目标图片")
        return False
    
    # 使用最佳匹配
    best_match = matches[0]
    
    # 计算图片中心位置
    center_x = best_match['left'] + best_match['width'] // 2
    center_y = best_match['top'] + best_match['height'] // 2
    
    try:
        # 移动鼠标
        print(f"正在移动鼠标到位置: ({center_x}, {center_y})")
        pyautogui.moveTo(center_x, center_y, duration=0.5)
        
        # 点击位置
        print("点击位置")
        pyautogui.click()
        
        # 等待一小段时间确保点击生效
        time.sleep(0.5)
        
        # 输入中文
        print(f"正在输入文字: {text_to_type}")
        type_chinese_text(text_to_type)
        
        print("操作完成")
        return True
        
    except Exception as e:
        print(f"操作失败: {e}")
        return False

def main():
    # 设置PyAutoGUI的安全设置
    pyautogui.FAILSAFE = True
    
    # 设置中文输入
    pyautogui.PAUSE = 0.5  # 增加操作间隔时间
    
    print("开始查找图片...")
    
    # 查找图片
    matches = find_image_on_screen('test.png')
    
    if matches:
        print(f"找到 {len(matches)} 个匹配位置")
        for i, match in enumerate(matches, 1):
            print(f"\n匹配 {i}:")
            print(f"位置: 左={match['left']}, 上={match['top']}")
            print(f"大小: {match['width']}x{match['height']}")
            print(f"匹配度: {match['confidence']:.2%}")
        
        # 移动鼠标并输入文字
        interact_with_image(matches)
    else:
        print("未找到目标图片")

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print("\n程序已停止")
    except Exception as e:
        print(f"发生错误: {e}")

总结

本文介绍的方法可以实现屏幕图片定位和自动输入文字的功能,适用于自动化测试、重复性操作等场景。通过调整参数和添加更多功能,可以满足不同的自动化需求。

标签:pyautogui,定位,Python,matches,match,template,print,输入,图片
From: https://blog.csdn.net/exlink2012/article/details/143908239

相关文章

  • Python全方位技术教程
    Python全方位技术教程引言Python是一种强大且易于学习的编程语言,因其简洁的语法和丰富的库而受到广泛欢迎。无论是数据分析、机器学习、Web开发,还是自动化脚本,Python都能胜任。本文将深入探讨Python的各个方面,帮助读者全面掌握这门语言。1.Python基础1.1Python简介P......
  • 用Python编写一个websocket客户端应用
    前两天发了一篇《用Python做一个websocket服务端》,起了一个websocket服务。然后又发了一篇《用jquery做一个websocket客户端》,这是直接在网页中验证websocket服务是否有效。但是,对于客户端怎么实际应用websocket并没有涉及。作为一个轻微强迫症者,我觉得还是要再捣鼓一下websock......
  • (2024最新毕设合集)基于SpringBoot的校园共享厨房信息系统-72647|可做计算机毕业设计JAV
    目 录摘要第一章 绪论1.1选题背景与意义1.2研究现状1.3论文结构与章节安排第二章系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统用例分......
  • python进阶-02-一篇文章搞明白BeautifulSoup
    python进阶-02-一篇文章搞明白BeautifulSoup一.说明开始今天的日拱一卒,上一篇文章我们介绍了Xpath,今天我们开始介绍BeautifulSoup,这个也是用来解析HTML文档的技术,但是跟Xpath还是有区别的,XPath是使用路径表达式来定位元素,而BeautifulSoup就是一个字简单。二.安装要使......
  • 计算机毕设项目源代码 python基于Python web框架的学生宿舍管理系统
    标题: python基于Pythonweb框架的学生宿舍管理系统设计一个基于PythonWeb框架的学生宿舍管理系统,可以显著提高宿舍管理的效率和便捷性。以下是一个典型的学生宿舍管理系统的主要功能模块:1.系统概述•目标:简化宿舍管理流程,提高管理效率,提升学生满意度。•技术栈:Python(后......
  • C#调用python的方法
    1.Python.NET:Python.NET允许在C#中直接调用Python代码。它提供了对Python解释器的嵌入支持,并且可以在Windows和Linux上运行。使用Python.NET,你可以在C#中加载Python模块并调用函数。2.IronPython:IronPython是一个Python实现,运行在.NET平台上。它允许你在.NET应用程序中直接执......
  • ESP32初学教程Python版-从环境搭建到完成控制LED灯闪烁 | 幽络源
    环境前提有Python环境,然后版本必须得大于或等于3.8有PIP,且最好配置了国内镜像这两个环境很简单,不懂的可以加入我们的网络技术交流QQ群询问:307531422前言幽络源站长使用的ESP32是WROMM的,当然,其他的大同小异大致步骤1.安装驱动2.下载MicroPython固件到ESP323.准备烧录固......
  • Python 性能优化与高效编程:让你的代码跑得更快、更稳
    Python性能优化与高效编程:让你的代码跑得更快、更稳Python是一种易于使用的编程语言,但它的性能常常被认为是相对较低的。特别是在数据密集型或计算密集型的任务中,Python的执行速度有时会成为瓶颈。因此,学会如何优化Python性能,使得程序在保证可读性的同时,依旧高效且快......
  • Python 项目自动化与 CI/CD 实践:让部署和发布像开挂一样简单
    Python项目自动化与CI/CD实践:让部署和发布像开挂一样简单在软件开发的世界里,自动化和持续集成/持续部署(CI/CD)是超级英雄,它们不仅让我们的工作更加高效,还能避免那些令人头疼的手动操作。它们就像开发者的最佳伙伴,随时准备打击bug,拯救开发进度。那么,今天我们就来聊聊怎......
  • React+AntD Table支持下拉分页和自定义输入分页条数
    实例支持在下拉分页框内输入分页条数来实现自定义分页代码usePageSizeSelect.jsimport{useEffect,useState}from"react";importBusfrom"../../utils/eventBus";exportfunctionusePageSizeSelect(){constonInputKeyDown=(e)=>{consttemp......