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)]
定位函数。都是从左上角原点开始向右向下搜索截图位置: 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实现
感觉没啥用