17-分析屏幕快照
20.7.2 分析屏幕快照
假设你的GUI自动化程序中,有一步是单击灰色按钮。在调用 click()
方法之前,你可以获取屏幕快照,查看脚本要单击处的像素。如果它的颜色和灰色按钮不一样,那么程序就知道出问题了。也许窗口发生了意外的移动,或者弹出式对话框挡住了该按钮。这时,不应该继续(可能会单击到错误的信息,造成严重破坏),程序可以“看到”它没有单击在正确的信息上,并自行停止。
你可以通过 pixel()
函数获得屏幕上某一像素点的RGB颜色值。在交互式环境中输入以下内容:
>>> import pyautogui
>>> pyautogui.pixel((0, 0))
(176, 176, 175)
>>> pyautogui.pixel((50, 200))
(130, 135, 144)
传递给 pixel()
一个坐标的元组,如(0, 0)或(50, 200),它将告诉你图像中这些坐标处的像素的颜色。 pixel()
的返回值是一个由3个整数组成的RGB元组,表示像素中的红、绿、蓝三色。(没有第四个alpha值,因为截图图像是完全不透明的。)
PyAutoGUI的 pixelMatchesColor()
函数将返回 True
,如果屏幕上给定的x和y坐标处的像素与给定的颜色相匹配,则返回 True
。第一个和第二个参数是整数的x和y坐标,第三个参数是屏幕像素必须匹配的RGB颜色的3个整数元组。在交互式环境中输入以下内容:
>>> import pyautogui
❶ >>> pyautogui.pixel((50, 200))
(130, 135, 144)
❷ >>> pyautogui.pixelMatchesColor(50, 200, (130, 135, 144))
True
❸ >>> pyautogui.pixelMatchesColor(50, 200, (255, 135, 144))
False
在用 pixel()
取得特定坐标处像素颜色的RGB元组之后❶,将同样的坐标和RGB元组传递给 pixelMatchesColor()
❷,这应该返回 True
。然后改变RGB元组中的一个值,用同样的坐标再次调用 pixelMatchesColor()
❸,这应该返回 False
。你的GUI自动化程序要调用 click()
之前,这种方法应该有用。请注意,给定坐标处的颜色应该“完全”匹配。即使只是稍有差异(例如,是 (255, 255, 254)
而不是 (255, 255, 255)
),函数也会返回 False
。