zoukankan      html  css  js  c++  java
  • PyAutoGUI (2) 屏幕处理和弹框,输入中文

    屏幕处理

    获取屏幕截图

    我们控制鼠标的操作,不能盲目的进行,所以我们需要监控屏幕上的内容,从而决定要不要进行对应的操作, pyautogui 提供了一个方法screenshot(),可以返回一个Pillow的image对象;

    这里有三个常用函数:

    im = pyautogui.screenshot():返回屏幕的截图,是一个Pillow的image对象
    im.getpixel((500, 500)):返回im对象上,(500,500)这一点像素的颜色,是一个RGB元组
    pyautogui.pixelMatchesColor(500,500,(12,120,400)) :是一个对比函数,对比的是屏幕上(500,500)这一点像素的颜色,与所给的元素是否相同;
    im = pyautogui.screenshot()
    im.save('屏幕截图.png')

    保存屏幕截图;

    识别图像

    首先,我们需要先获得一个屏幕快照,例如我们想要点赞,我们就先把大拇指的图片保存下来;然后使用函数:locateOnScreen(‘zan.png’) ,如果可以找到图片,则返回图片的位置,如:Box(left=25, top=703, width=22, height=22);如果找不到图片,则返回None;
    如果,屏幕上有多处图片可以匹配,则需要使用locateAllOnScreen(‘zan.png’) ,如果匹配到多个值,则返回一个list,参考如下:

    import pyautogui
    pyautogui.PAUSE = 1
    
    # 图像识别(一个)
    btm = pyautogui.locateOnScreen('zan.png')
    print(btm)  # Box(left=1280, top=344, width=22, height=22)
    
    # 图像识别(多个)
    btm = pyautogui.locateAllOnScreen('zan.png')
    print(list(btm))  # [Box(left=1280, top=344, width=22, height=22), Box(left=25, top=594, width=22, height=22)]
    pyautogui.center((left, top, width, height))返回指定位置的中心点;这样,我们就可以再配合鼠标操作点击找到图片的中心;参考实例:点赞
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import pyautogui
    import time
    
    
    def zan():
        time.sleep(0.5)    # 等待 0.5 秒
        left, top, width, height = pyautogui.locateOnScreen('zan.png')   # 寻找 点赞图片;
        center = pyautogui.center((left, top, width, height))    # 寻找 图片的中心
        pyautogui.click(center)    # 点击
        print('点赞成功!')
    
    
    while True:
        if pyautogui.locateOnScreen('zan.png'):
            zan()   # 调用点赞函数
        else:
            pyautogui.scroll(-500)    # 本页没有图片后,滚动鼠标;
            print('没有找到目标,屏幕下滚~')
    
    
    import pyautogui
    
    pyautogui.screenshot(r'C:UsersDHDesktopPYmy_screenshot.png') # 截全屏并设置保存图片的位置和名称
    im = pyautogui.screenshot(r'C:UsersDHDesktopPYmy_screenshot.png') # 截全屏并设置保存图片的位置和名称
    print(im) # 打印图片的属性
    
    # 不截全屏,截取区域图片。截取区域region参数为:左上角XY坐标值、宽度和高度
    pyautogui.screenshot(r'C:UsersDHDesktopPY
    egion_screenshot.png', region=(0, 0, 300, 400))
    
    pix = pyautogui.screenshot().getpixel((220, 200)) # 获取坐标(220,200)所在屏幕点的RGB颜色
    positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'
    print(positionStr) # 打印结果为RGB:( 60, 63, 65)
    pix = pyautogui.pixel(220, 200) # 获取坐标(220,200)所在屏幕点的RGB颜色与上面三行代码作用一样
    positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'
    print(positionStr) # 打印结果为RGB:( 60, 63, 65)
    
    # 如果你只是要检验一下指定位置的像素值,可以用pixelMatchesColor(x,y,RGB)函数,把X、Y和RGB元组值穿入即可
    # 如果所在屏幕中(x,y)点的实际RGB三色与函数中的RGB一样就会返回True,否则返回False
    # tolerance参数可以指定红、绿、蓝3种颜色误差范围
    pyautogui.pixelMatchesColor(100, 200, (255, 255, 255))
    pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10)
    
    # 获得文件图片在现在的屏幕上面的坐标,返回的是一个元组(top, left, width, height)
    # 如果截图没找到,pyautogui.locateOnScreen()函数返回None
    a = pyautogui.locateOnScreen(r'C:UsersDHDesktopPY
    egion_screenshot.png')
    print(a) # 打印结果为Box(left=0, top=0, width=300, height=400)
    x, y = pyautogui.center(a) # 获得文件图片在现在的屏幕上面的中心坐标
    print(x, y) # 打印结果为150 200
    x, y = pyautogui.locateCenterOnScreen(r'C:UsersDHDesktopPY
    egion_screenshot.png') # 这步与上面的四行代码作用一样
    print(x, y) # 打印结果为150 200
    
    # 匹配屏幕所有与目标图片的对象,可以用for循环和list()输出
    pyautogui.locateAllOnScreen(r'C:UsersDHDesktopPY
    egion_screenshot.png')
    for pos in pyautogui.locateAllOnScreen(r'C:UsersDHDesktopPY
    egion_screenshot.png'):
      print(pos)
    # 打印结果为Box(left=0, top=0, width=300, height=400)
    a = list(pyautogui.locateAllOnScreen(r'C:UsersDHDesktopPY
    egion_screenshot.png'))
    print(a) # 打印结果为[Box(left=0, top=0, width=300, height=400)]
    pyautogui的使用方法
    定位函数。都是从左上角原点开始向右向下搜索截图位置:
    
    locateOnScreen(image, grayscale=False):返回找到的第一个截图Image对象在屏幕上的坐标(left, top, width, height),如果没找到返回None
    locateCenterOnScreen(image, grayscale=False):返回找到的第一个截图Image对象在屏幕上的中心坐标(x, y),如果没找到返回None
    locateAllOnScreen(image, grayscale=False):返回找到的所有相同截图Image对象在屏幕上的坐标(left, top, width, height)的生成器
    locate(needleImage, haystackImage, grayscale=False):返回找到的第一个截图Image对象在haystackImage里面的坐标(left, top, width, height),如果没找到返回None
    locateAll(needleImage, haystackImage, grayscale=False):返回找到的所有相同截图Image对象在haystackImage里面的坐标(left, top, width, height)的生成器
    定位函数

    提示信息框

    提示框/警告框

    import pyautogui
    a = pyautogui.alert(text='This is an alert box.', title='Test')
    print(a)

    输出如下图:点击确定,返回值为‘OK’
    在这里插入图片描述

    选择框

    import pyautogui
    a = pyautogui.confirm('选择一项', buttons=['A', 'B', 'C'])
    print(a)

    在这里插入图片描述
    输出如下图:点击B选项,返回值为‘B’

    密码输入

    import pyautogui
    
    a = pyautogui.password('Enter password (text will be hidden)')
    print(a)

    输出如下图:输入密码,显示为密文,点击OK,返回值为刚刚输入的值;
    在这里插入图片描述

     

    普通输入

    import pyautogui
    
    a = pyautogui.prompt('请输入一个数字:')
    print(a)

    在这里插入图片描述
    输出如下图:显示为明文,点击OK,返回值为刚刚输入的值。

     

    灰度值匹配

    
    

    可以把grayscale参数设置为True来加速定位(大约提升30%),默认为False。这种去色(desaturate)方法可以加速定位,但是也可能导致假阳性(false-positive)匹配: 

    import pyautogui
    button7location = pyautogui.locateOnScreen('pyautogui/calc7key.png', grayscale=True)
    button7location
     
    (1227, 546, 29, 28)
    
    

    像素匹配

    
    
    要获取截屏某个位置的RGB像素值,可以用Image对象的getpixel()方法:
    import pyautogui
    im = pyautogui.screenshot()
    im.getpixel((100, 200))
     
    (255, 255, 255)
    
    
    也可以用PyAutoGUI的pixel()函数,是之前调用的包装:
    pyautogui.pixel(100, 200)
     
    (255, 255, 255)

    如果你只是要检验一下指定位置的像素值,可以用pixelMatchesColor()函数,把X、Y和RGB元组值穿入即可:

    pyautogui.pixelMatchesColor(100, 200, (255, 255, 255))
     
    True
     
    pyautogui.pixelMatchesColor(100, 200, (255, 255, 245))
     
    False
    tolerance参数可以指定红、绿、蓝3种颜色误差范围:
    pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10)
     
    True
     
    
    pyautogui.pixelMatchesColor(100, 200, (248, 250, 245), tolerance=10)
     
    True
     
    pyautogui.pixelMatchesColor(100, 200, (205, 255, 245), tolerance=10)
     
    False

    输入中文

    pyperclip模块

    copy('str1')                   复制内容str1,内容可设置为中文等

    
    

    paste()       将复制的内容粘贴到输入处,粘贴时也可使用pyautogui的hotkey实现

    感觉没啥用




  • 相关阅读:
    TBalloonHint 提示
    Delphi 结构体常量的定义
    editplus的用法
    Delphi中的容器类
    delphi XE5 UnicodeString的由来
    Delphi:TObject简要说明-对象的创建流程
    Java 反射之私有字段和方法详细介绍
    Java之画图板浅析
    java中的AlgorithmParameterSpec接口
    Java抽象类简单学习
  • 原文地址:https://www.cnblogs.com/yunlong-study/p/14447093.html
Copyright © 2011-2022 走看看