返回介绍

18.6 处理屏幕

发布于 2024-01-22 21:44:06 字数 1753 浏览 0 评论 0 收藏 0

你的GUI自动化程序没有必要盲目地点击和输入。pyautogui拥有屏幕快照的功能,可以根据当前屏幕的内容创建图形文件。这些函数也可以返回一个Pillow的Image对象,包含当前屏幕的内容。如果你是跳跃式地阅读本书,可能需要阅读第17章,安装pillow模块,然后再继续本节的内容。

在Linux计算机上,需要安装scrot程序,才能在pyautogui中使用屏幕快照功能。在终端窗口中,执行sudo apt-get install scrot,安装该程序。如果你使用Windows或OS X,就跳过这一步,继续本节的内容。

18.6.1 获取屏幕快照

要在Python中获取屏幕快照,就调用pyautogui.screenshot() 函数。在交互式环境中输入以下内容:

>>> import pyautogui
>>> im = pyautogui.screenshot()

im变量将包含一个屏幕快照的Image对象。现在可以调用im变量中Image对象的方法,就像所有其他Image对象一样。在交互式环境中输入以下内容:

>>> im.getpixel((0, 0))
(176, 176, 175)
>>> im.getpixel((50, 200))
(130, 135, 144)

向getpixel() 函数传入坐标元组,如(0,0)或(50,200),它将告诉你图像中这些坐标处的像素颜色。getpixel() 函数的返回值是一个RGB元组,包含3个整数,表示像素的红绿蓝值(没有第四个值表示alpha,因为屏幕快照是完全不透明的)。这就是你的程序“看到”当前屏幕上内容的方法。

18.6.2 分析屏幕快照

假设你的GUI自动化程序中,有一步是点击灰色按钮。在调用click() 方法之前,你可以获取屏幕快照,查看脚本要点击处的像素。如果它的颜色和灰色按钮不一样,那么程序就知道出问题了。也许窗口发生了意外的移动,或者弹出式对话框挡住了该按钮。这时,不应该继续(可能会点击到错误的东西,造成严重破坏),程序可以“看到”它没有点击在正确的东西上,并自行停止。

如果屏幕上指定的 x、y 坐标处的像素与指定的颜色匹配,PyAutoGUI 的pixelMatchesColor() 函数将返回True。第一和第二个参数是整数,对应x和y坐标。第三个参数是一个元组,包含3个整数,是屏幕像素必须匹配的RGB颜色。在交互式环境中输入以下内容:

 >>> import pyautogui
 >>> im = pyautogui.screenshot()
❶ >>> im.getpixel((50, 200))
 (130, 135, 144)
❷ >>> pyautogui.pixelMatchesColor(50, 200, (130, 135, 144))
 True
❸ >>> pyautogui.pixelMatchesColor(50, 200, (255, 135, 144))
 False

在获取屏幕快照,并用getpixel() 函数取得特定坐标处像素颜色的RGB元组之后❶,将同样的坐标和RGB元组传递给pixelMatchesColor() ❷,这应该返回True。然后改变RBG元组中的一个值,用同样的坐标再次调用pixelMatches Color() ❸,这应该返回False。你的GUI自动化程序要调用click() 之前,这种方法应该有用。请注意,给定坐标处的颜色应该“完全”匹配。即使只是稍有差异(例如,是(255,255,254)而不是(255,255,255)),那么函数也会返回False。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文