python找图片并用鼠标点击

查看 164|回复 10
作者:相位猛冲   
用python编写自动化脚本的时候
大部分的业务逻辑都是在用【鼠标点击指定坐标和图片】
1.鼠标指定坐标点击  Python 模拟用户操作鼠标
2.找到图片点击图片
如果你不知道窗口句柄,可以用我下面的代码,只要输入目标的窗口名字就行
例如:
1.你打开了【QQ游戏】窗口,直接用[Python] 纯文本查看 复制代码句柄_模糊取标题(“QQ游戏”)
2.你打开了【QQ游戏 - fdsfxcqwesfdsxvcx】窗口,也直接用[Python] 纯文本查看 复制代码句柄_模糊取标题(“QQ游戏”)
源码放在下面了
[Python] 纯文本查看 复制代码import re,win32gui
def 句柄_模糊取标题(模糊标题名):
    ' 匹配多个:返回数组;反之:返回1个\n\n返回-1没有找到'
    窗口句柄_list = []
    # 编译正则表达式模式
    pattern = re.compile(模糊标题名, re.I)  # re.I 表示不区分大小写
    # 遍历所有窗口,找到匹配的标题
    def callback(窗口句柄, 窗口句柄_list):
        if win32gui.IsWindowVisible(窗口句柄):
            window_text = win32gui.GetWindowText(窗口句柄)
            if re.search(pattern, window_text):
                窗口句柄_list.append(窗口句柄)
        return True
    # 枚举窗口并执行回调函数
    win32gui.EnumWindows(callback, 窗口句柄_list)
    if len(窗口句柄_list) == 1:
        return 窗口句柄_list[0]
    elif len(窗口句柄_list) > 1:
        return 窗口句柄_list
    else:
        return -1
查找图片并点击的python源码如下:
[Python] 纯文本查看 复制代码import pyautogui,os,win32gui
图片_找图并点击('1.png')
def 图片_找图并点击(image_path, 窗口句柄=None, click_type=1, s=None):
    """识别图像并根据提供的参数执行单击或双击。"""
    if not os.path.exists(image_path):
        print("图片路径错误:不存在这个图片!")
        return
    # 记录当前鼠标位置,稍后将鼠标恢复到此位置
    original_x, original_y = pyautogui.position()
    try:
        # 激活窗口
        if 窗口句柄:
           win32gui.SetForegroundWindow(窗口句柄)  # 设置窗口到前台
        # 区分窗口句柄是否存在,决定如何进行屏幕捕获
        if 窗口句柄:
            # 获取窗口的屏幕坐标
            left, top, right, bottom = win32gui.GetWindowRect(窗口句柄)
            window_screenshot = ImageGrab.grab(bbox=(left, top, right, bottom))
            # 在窗口截图中寻找匹配图像
            position = pyautogui.locate(image_path, window_screenshot, confidence=0.8)
        else:
            # 在整个屏幕中寻找匹配图像
            position = pyautogui.locateOnScreen(image_path, confidence=0.8)
        if position is None:
            print("图片未找到!")
            return
        # 计算图像中心点
        center_x, center_y = position.left + position.width // 2, position.top + position.height // 2
        if 窗口句柄:
            # 将坐标调整到全屏幕坐标
            center_x += left
            center_y += top
        pyautogui.moveTo(center_x, center_y)  # 移动鼠标到图像中心
        if s:  # 如果有延迟参数,先延时
            time.sleep(s)
        # 根据click_type参数,执行单击或双击
        if click_type == 2:
            pyautogui.doubleClick()
        else:
            pyautogui.click()
    except Exception as e:
        print("图片挡住了:", e)
    finally:
        pyautogui.moveTo(original_x, original_y)  # 操作后将鼠标还原到原位
快去试试把{:1_918:}

句柄, 窗口

hqt   

wc 中文def… 理论上[Python] 纯文本查看 复制代码def 打印(arg:str):
  print(arg)是不是能把整个Python改成中文我想整活了
相位猛冲
OP
  


helian147 发表于 2024-1-22 13:04
试了试,pyautogui找图片效果不稳定,不改代码的前提下,有时找得到有时找不到图片报错

图片在电脑屏幕里,没有遮挡的话,应该是可以的
图片有可能会受电脑背景影响,把图片截小一点试试
例外我用的python3.12 win10
郑前勇   

要是来个成品就更好了
相位猛冲
OP
  


郑前勇 发表于 2024-1-21 15:00
要是来个成品就更好了

拿我的源码直接编译exe就可以了
郑前勇   


相位猛冲 发表于 2024-1-21 15:16
拿我的源码直接编译exe就可以了

我是中学生  还不会 python 大神能来一个成品谢谢
sai609   

以图搜索的python逻辑在哪里
新颖轻   

怎么感觉是个易语言写法
urdarling   

这个做自动化测试方便
xingwenzhiyuan   

这个代码,很厉害的说,学习一下
您需要登录后才可以回帖 登录 | 立即注册

返回顶部