处理屏幕
pyautogui
拥有屏幕快照的功能,可以根据当前屏幕的内容创建图形文件。这些函数也可以返回一个 Pillow 的 Image 对象,包含当前屏幕的内容。(需要安装 pillow 模块)。
在 Linux 计算机上,需要安装 scrot 程序,才能在 pyautogui
中使用屏幕快照功能。在终端窗口中,执行 sudo apt-get install scrot
,安装该程序。如果你使用 Windows或 OS X,就跳过这一步,继续本节的内容。
获取屏幕快照——screenshot()
要在 Python 中获取屏幕快照,就调用pyautogui.screenshot()
函数。在交互式环境中输入以下内容:
import pyautogui
im = pyautogui.screenshot()
im 变量将包含一个屏幕快照的 Image 对象。现在可以调用 im 变量中 Image 对象的方法,就像所有其他 Image 对象一样。在交互式环境中输入以下内容:
im.getpixel((0, 0))
im.getpixel((50, 200))
向 getpixel()
函数传入坐标元组,如(0,0)或(50,200),它将告诉你图像中这些坐标处的像素颜色。getpixel()
函数的返回值是一个 RGB 元组,包含 3 个整数,表示像素的红绿蓝值(没有第四个值表示 alpha,因为屏幕快照是完全不透明的)。这就是你的程序“看到”当前屏幕上内容的方法。
分析屏幕快照——screenshot()
假设你的 GUI 自动化程序中,有一步是点击灰色按钮。在调用 click() 方法之前,你可以获取屏幕快照,查看脚本要点击处的像素。如果它的颜色和灰色按钮不一样,那么程序就知道出问题了。也许窗口发生了意外的移动,或者弹出式对话框挡住了该按钮。这时,不应该继续(可能会点击到错误的东西,造成严重破坏),程序可以“看到”它没有点击在正确的东西上,并自行停止。
如果屏幕上指定的 x、y 坐标处的像素与指定的颜色匹配,PyAutoGUI
的pixelMatchesColor()
函数将返回 True。第一和第二个参数是整数,对应 x 和 y 坐标。第三个参数是一个元组,包含 3 个整数,是屏幕像素必须匹配的 RGB 颜色。在交互式环境中输入以下内容:
import pyautogui
im = pyautogui.screenshot()
im.getpixel((50, 200))
# 输出(255,255,255)
pyautogui.pixelMatchesColor(50, 200, (255, 255, 255))
# 输出True
pyautogui.pixelMatchesColor(50, 200, (155, 255, 255))
# 输出Flase
在获取屏幕快照,并用 getpixel()
函数取得特定坐标处像素颜色的 RGB 元组之后①,将同样的坐标和 RGB 元组传递给 pixelMatchesColor()
②,这应该返回 True。
然后改变 RBG 元组中的一个值,用同样的坐标再次调用 pixelMatches Color()
③,这应该返回 False。你的 GUI 自动化程序要调用 click() 之前,这种方法应该有用。
请注意,给定坐标处的颜色应该“完全”匹配。即使只是稍有差异(例如,是(255,255,254)而不是(255,255,255)),那么函数也会返回 False。