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:\Users\ZDH\Desktop\PY\my_screenshot.png') # 截全屏并设置保存图片的位置和名称
im = pyautogui.screenshot(r'C:\Users\ZDH\Desktop\PY\my_screenshot.png') # 截全屏并设置保存图片的位置和名称
print(im) # 打印图片的属性

# 不截全屏,截取区域图片。截取区域region参数为:左上角XY坐标值、宽度和高度
pyautogui.screenshot(r'C:\Users\ZDH\Desktop\PY\region_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:\Users\ZDH\Desktop\PY\region_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:\Users\ZDH\Desktop\PY\region_screenshot.png') # 这步与上面的四行代码作用一样
print(x, y) # 打印结果为150 200

# 匹配屏幕所有与目标图片的对象,可以用for循环和list()输出
pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png')
for pos in pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png'):
  print(pos)
# 打印结果为Box(left=0, top=0, width=300, height=400)
a = list(pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_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实现

感觉没啥用




posted @ 2021-02-25 15:57  云long  阅读(2683)  评论(0编辑  收藏  举报