PyAutoGUI操作指南之APi详解:键盘控制功能+实现热键组合+消息框功能+屏幕截图与图像定位:截图+定位单个目标+定位全部目标+灰度匹配+像素匹配

507 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情

4.1 write()函数

import pyautogui
# 使用write()只能按单字符键,因此不能按Shift 或 F1键

# 立即输入字符
pyautogui.write('Hello world!')
# 依次输入字符,每个字符之间间隔0.25秒
pyautogui.write('Hello world!', interval=0.25)

4.2 press()、keyDown()和keyUp()函数

import pyautogui

# press()函数实际上只是keyDown()和keyUp()函数的包装器,它们模拟按下一个键,然后释放它。
# 在每次按下之间添加延迟间隔,设置interval即可,传入int或float

# 按下回车键
pyautogui.press('enter')
# 按下F1键
pyautogui.press('f1')
# 按下←键
pyautogui.press('left')

# 要在按住Shift键的同时按左箭头键三次
pyautogui.keyUp('shift')
pyautogui.press(['left', 'left', 'left']) # 多个按键用字符串列表
pyautogui.keyDown('shift')

# 设置presses=3,实现按←键3次
pyautogui.press('left', presses=3)

4.3 hotkey() :实现热键组合

import pyautogui

# 为了方便按下热键或键盘快捷键,可将热键()传递给几个键串,这些键串将按顺序按下,然后按相反顺序释放。
# 要在每次按下之间添加延迟间隔,可为interval参数传递int或float
pyautogui.hotkey('ctrl', 'shift', 'esc')
# 等价于
pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.keyDown('esc')
pyautogui.keyUp('esc')
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')

4.4 KEYBOARD_KEYS

KEY_NAMES = [
    "\t",
    "\n",
    "\r",
    " ",
    "!",
    '"',
    "#",
    "$",
    "%",
    "&",
    "'",
    "(",
    ")",
    "*",
    "+",
    ",",
    "-",
    ".",
    "/",
    "0",
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    ":",
    ";",
    "<",
    "=",
    ">",
    "?",
    "@",
    "[",
    "\\",
    "]",
    "^",
    "_",
    "`",
    "a",
    "b",
    "c",
    "d",
    "e",
    "f",
    "g",
    "h",
    "i",
    "j",
    "k",
    "l",
    "m",
    "n",
    "o",
    "p",
    "q",
    "r",
    "s",
    "t",
    "u",
    "v",
    "w",
    "x",
    "y",
    "z",
    "{",
    "|",
    "}",
    "~",
    "accept",
    "add",
    "alt",
    "altleft",
    "altright",
    "apps",
    "backspace",
    "browserback",
    "browserfavorites",
    "browserforward",
    "browserhome",
    "browserrefresh",
    "browsersearch",
    "browserstop",
    "capslock",
    "clear",
    "convert",
    "ctrl",
    "ctrlleft",
    "ctrlright",
    "decimal",
    "del",
    "delete",
    "divide",
    "down",
    "end",
    "enter",
    "esc",
    "escape",
    "execute",
    "f1",
    "f10",
    "f11",
    "f12",
    "f13",
    "f14",
    "f15",
    "f16",
    "f17",
    "f18",
    "f19",
    "f2",
    "f20",
    "f21",
    "f22",
    "f23",
    "f24",
    "f3",
    "f4",
    "f5",
    "f6",
    "f7",
    "f8",
    "f9",
    "final",
    "fn",
    "hanguel",
    "hangul",
    "hanja",
    "help",
    "home",
    "insert",
    "junja",
    "kana",
    "kanji",
    "launchapp1",
    "launchapp2",
    "launchmail",
    "launchmediaselect",
    "left",
    "modechange",
    "multiply",
    "nexttrack",
    "nonconvert",
    "num0",
    "num1",
    "num2",
    "num3",
    "num4",
    "num5",
    "num6",
    "num7",
    "num8",
    "num9",
    "numlock",
    "pagedown",
    "pageup",
    "pause",
    "pgdn",
    "pgup",
    "playpause",
    "prevtrack",
    "print",
    "printscreen",
    "prntscrn",
    "prtsc",
    "prtscr",
    "return",
    "right",
    "scrolllock",
    "select",
    "separator",
    "shift",
    "shiftleft",
    "shiftright",
    "sleep",
    "space",
    "stop",
    "subtract",
    "tab",
    "up",
    "volumedown",
    "volumemute",
    "volumeup",
    "win",
    "winleft",
    "winright",
    "yen",
    "command",
    "option",
    "optionleft",
    "optionright",
]

PyAutoGUI利用PyMsgBox中的消息框函数提供跨平台的纯Python方式来显示JavaScript样式的消息框。

5.1 alert()

import pyautogui

pyautogui.alert(text='这里写内容', title='通知框标题位置', button='OK')

在这里插入图片描述

5.2 confirm()

import pyautogui

pyautogui.alert(text='这里写内容', title='通知框标题位置', button='OK')

pyautogui.confirm(text='这里写内容', title='确认框标题位置', buttons=['OK', 'Cancel'])

pyautogui.prompt(text='这里写内容', title='输入标题位置' , default='默认输入')

在这里插入图片描述

5.3 prompt()

import pyautogui

pyautogui.prompt(text='这里写内容', title='输入标题位置' , default='默认输入')

在这里插入图片描述

5.4 password()

import pyautogui

pyautogui.password(text='这里写内容', title='密码框', default='', mask='*')

6 屏幕截图与图像定位

在这里插入图片描述

PyAutoGUI可以拍摄屏幕截图,将其保存到文件中,并在屏幕中定位图像。OSX使用操作系统附带的screencapture命令。Linux使用scrot命令,可以通过运行sudo-apt-get-install-scrot来安装该命令。

功能介绍:一个需要点击的按钮,并且想在屏幕上找到它。

6.1 屏幕截图

import pyautogui

# 截取全屏 在1920 x 1080屏幕上,screenshot()函数大约需要100毫秒-不快但不慢。
im1 = pyautogui.screenshot()
# 截取全屏,并以图片保存
im2 = pyautogui.screenshot('my_screenshot.png')

# 截取指定位置,传递要捕获的区域的左侧、顶部、宽度和高度的四个整数元组:
im = pyautogui.screenshot(region=(0,0, 300, 400))

6.2 定位单个目标

import pyautogui

# ---------------------------------------------------------------
# 获取感兴趣区域的 (left, top, width, height)
button7location = pyautogui.locateOnScreen('looksLikeThis.png')
print(button7location)
print(button7location[0])
print(button7location.left)
# 计算感兴趣区域的中心点的xy坐标
button7point = pyautogui.center(button7location)
print(button7point)
print(button7point[0])
print(button7point.x)
# 点击感兴趣区域的中心点坐标
button7x, button7y = button7point
pyautogui.click(button7x, button7y)

# ---------------------------------------------------------------
# 快速点击感兴趣区域
pyautogui.click('looksLikeThis.png')

# ---------------------------------------------------------------
# 设置置信度 需要安装opencv
button7location = pyautogui.locateOnScreen('looksLikeThis.png', confidence=0.9)
print(button7location)
print(button7location[0])
print(button7location.left)

# ---------------------------------------------------------------
# 获取感兴趣区域的中心点位置坐标,并且点击
x, y = pyautogui.locateCenterOnScreen('looksLikeThis.png')
pyautogui.click(x, y)

6.3 定位全部目标的位置

import pyautogui
# 这些“定位”功能相当昂贵;他们可以用整整一秒钟的时间跑。
for pos in pyautogui.locateAllOnScreen('someButton.png') 
	print(pos)
    
# 提高速度的最佳方法:传递一个区域参数(一个4整型元组(左、上、宽、高)),以仅搜索屏幕的较小区域,而不是全屏:
pyautogui.locateOnScreen('someButton.png', region=(0,0, 300, 400))

6.4 灰度匹配

import pyautogui

button7location = pyautogui.locateOnScreen('looksLikeThis.png', grayscale=True)
print(button7location)

6.5 像素匹配(获取屏幕截图中像素的RGB颜色)

import pyautogui
# 获取屏幕截图中像素的RGB颜色方案①
im = pyautogui.screenshot()
color_RGB = im.getpixel((100, 200))
print(color_RGB)	#(130, 135, 144)

# 获取屏幕截图中像素的RGB颜色方案②
pix = pyautogui.pixel(100, 200)
print(pix)	# RGB(red=130, green=135, blue=144)
print(pix[0])	# 130
print(pix.red)	# 130

# 如果只需要验证单个像素是否与给定像素匹配,请调用pixelMatchesColor()函数,将其表示的颜色的X坐标、Y坐标和RGB元组传递给它:
pyautogui.pixelMatchesColor(100, 200, (130, 135, 144)) # True

pyautogui.pixelMatchesColor(100, 200, (0, 0, 0)) # False

# tolerance关键字参数指定红色、绿色和蓝色值在仍匹配时可以变化多少:
pyautogui.pixelMatchesColor(100, 200, (140, 125, 134)) # False
pyautogui.pixelMatchesColor(100, 200, (140, 125, 134), tolerance=10) # True