当前位置:嗨网首页>书籍在线阅读

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