截图函数

PyAutoGUI可以截取屏幕截图,将其保存到文件中,并在屏幕中查找图像。如果您有一个小图像,例如需要单击并希望在屏幕上找到它的按钮,这将非常有用。这些功能由PyScreeze模块提供,该模块与PyAutoGUI一起安装。

屏幕截图功能需要Pillow模块。OS X使用操作系统screencapture附带的命令。Linux使用该scrot命令,可以通过运行来安装。sudo apt-get install scrot

截图()函数

调用screenshot()将返回Image对象(有关详细信息,请参阅Pillow或PIL模块文档)。传递文件名字符串会将屏幕截图保存到文件中,并将其作为Image对象返回。

>>> import pyautogui
>>> im1 = pyautogui.screenshot()
>>> im2 = pyautogui.screenshot('my_screenshot.png')

在1920 x 1080的屏幕上,该screenshot()功能大约需要100毫秒 - 它并不快,但速度并不慢。

region如果您不想要整个屏幕的屏幕截图,还有一个可选的关键字参数。您可以传递区域左侧,顶部,宽度和高度的四个整数元组来捕获:

>>> import pyautogui
>>> im = pyautogui.screenshot(region=(0,0, 300, 400))

定位函数

注意:从版本0.9.41开始,如果locate函数找不到提供的图像,它们将引发ImageNotFoundException而不是返回None

如果您有图像文件,可以在屏幕上直观地找到某些内容。例如,假设计算器应用程序正在您的计算机上运行,​​看起来像这样:

如果您不知道计算器按钮的确切屏幕坐标,则无法调用moveTo()click()函数。每次启动计算器时,计算器都会出现略微不同的位置,导致您每次都重新找到坐标。但是,如果您有按钮的图像,例如7按钮的图像:

...你可以调用locateOnScreen('calc7key.png')函数来获取屏幕坐标。返回值是一个4整数元组:(左,顶,宽,高)。可以传递此元组center()以获得该区域中心的X和Y坐标。如果在屏幕上找不到图像,则locateOnScreen()加注ImageNotFoundException

>>> import pyautogui
>>> button7location = pyautogui.locateOnScreen('calc7key.png')
>>> button7location
Box(left=1416, top=562, width=50, height=41)
>>> button7location[0]
1416
>>> button7location.left
1416
>>> button7point = pyautogui.center(button7location)
>>> button7point
Point(x=1441, y=582)
>>> button7point[0]
1441
>>> button7point.x
1441
>>> button7x, button7y = button7point
>>> pyautogui.click(button7x, button7y) # clicks the center of where the 7 button was found
>>> pyautogui.click('calc7key.png') # a shortcut version to click on the center of where the 7 button was found

可选confidence关键字参数指定函数在屏幕上定位图像的准确性。如果函数由于可忽略的像素差异而无法定位图像,这将非常有用:

>>> import pyautogui
>>> button7location = pyautogui.locateOnScreen('calc7key.png', confidence=0.9)
>>> button7location
Box(left=1416, top=562, width=50, height=41)

locateCenterOnScreen()功能结合locateOnScreen()center()

>>> import pyautogui
>>> x, y = pyautogui.locateCenterOnScreen('calc7key.png')
>>> pyautogui.click(x, y)

在1920 x 1080屏幕上,定位功能调用大约需要1或2秒。这对于动作视频游戏来说可能太慢,但适用于大多数目的和应用程序。

有几个“定位”功能。他们都开始查看屏幕的左上角(或图像)并向右看,然后向下看。参数可以是a

  • locateOnScreen(image, grayscale=False)- 返回image屏幕上第一个找到的实例的(左,顶部,宽度,高度)坐标。ImageNotFoundException如果在屏幕上找不到则会引发。
  • locateCenterOnScreen(image, grayscale=False)- 返回image屏幕上第一个找到的实例中心的(x,y)坐标。ImageNotFoundException如果在屏幕上找不到则会引发。
  • locateAllOnScreen(image, grayscale=False) - 返回一个生成器,该生成器生成(左,顶部,宽度,高度)元组,用于在屏幕上找到图像的位置。
  • locate(needleImage, haystackImage, grayscale=False)-返回(左,上,宽度,高度)的第一坐标发现的实例needleImagehaystackImageImageNotFoundException如果在屏幕上找不到则会引发。
  • locateAll(needleImage, haystackImage, grayscale=False)- 返回一个生成器(生成(左,顶部,宽度,高度)元组的位置needleImagehaystackImage

“locate all”函数可用于for循环或传递给list()

>>> import pyautogui
>>> for pos in pyautogui.locateAllOnScreen('someButton.png')
... print(pos)
...
(1101, 252, 50, 50)
(59, 481, 50, 50)
(1395, 640, 50, 50)
(1838, 676, 50, 50)
>>> list(pyautogui.locateAllOnScreen('someButton.png'))
[(1101, 252, 50, 50), (59, 481, 50, 50), (1395, 640, 50, 50), (1838, 676, 50, 50)]

这些“定位”功能相当昂贵; 他们可以花一整秒钟来跑步。加速它们的最好方法是传递一个region参数(4个整数元组(左,顶部,宽度,高度))来仅搜索屏幕的较小区域而不是全屏:

>>> import pyautogui
>>> pyautogui.locateOnScreen('someButton.png', region=(0,0, 300, 400))

灰度匹配

或者,您可以传递grayscale=True给locate函数以提供轻微的加速(大约30%-ish)。这会使图像和屏幕截图中的颜色去饱和,从而加快定位速度,但可能导致误判。

>>> import pyautogui
>>> button7location = pyautogui.locateOnScreen('calc7key.png', grayscale=True)
>>> button7location
(1416, 562, 50, 41)

像素匹配

要获取屏幕截图中像素的RGB颜色,请使用Image对象的getpixel()方法:

>>> import pyautogui
>>> im = pyautogui.screenshot()
>>> im.getpixel((100, 200))
(130, 135, 144)

或者作为单个函数,调用pixel()PyAutoGUI函数,它是以前调用的包装器:

>>> import pyautogui
>>> pix = pyautogui.pixel(100, 200)
>>> pix
RGB(red=130, green=135, blue=144)
>>> pix[0]
130
>>> pix.red
130

如果您只需要验证单个像素与给定像素匹配,请调用该pixelMatchesColor()函数,向其传递X坐标,Y坐标和它所代表颜色的RGB元组:

>>> import pyautogui
>>> pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
True
>>> pyautogui.pixelMatchesColor(100, 200, (0, 0, 0))
False

可选tolerance关键字参数指定在匹配时每个红色,绿色和蓝色值可以变化的程度:

>>> import pyautogui
>>> pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
True
>>> pyautogui.pixelMatchesColor(100, 200, (140, 125, 134))
False
>>> pyautogui.pixelMatchesColor(100, 200, (140, 125, 134), tolerance=10)
True

来源:https://pyautogui.readthedocs.io/en/latest/screenshot.html#

pyautogui 文档(五):截图及定位功能的更多相关文章

  1. 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

    朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...

  2. Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  3. 在SharePoint 2013 中使用文档库Scheduling (计划公布功能)

    本文讲述在SharePoint2013 中使用文档库Scheduling (计划公布功能)的步骤和注意的事项. 文档库Scheduling (计划公布功能) 用于设定当文档通过审批后特定的时间区间内才 ...

  4. Xps实现文档显示、套打功能

    wpf采用Xps实现文档显示.套打功能(原创) 近期的一个项目需对数据进行套打,用户要求现场不允许安装office.页面预览显示必须要与文档完全一致,xps文档来对数据进行处理.Wpf的Documen ...

  5. Delphi APP 開發入門(五)GPS 定位功能

    Delphi APP 開發入門(五)GPS 定位功能 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次數 ...

  6. wpf采用Xps实现文档显示、套打功能

    原文:wpf采用Xps实现文档显示.套打功能 近期的一个项目需对数据进行套打,用户要求现场不允许安装office.页面预览显示必须要与文档完全一致,xps文档来对数据进行处理.Wpf的Document ...

  7. pyautogui 文档(一):简介

    PyAutoGUI 可实现控制鼠标.键盘.消息框.截图.定位等功能,最近做了个自动化需要这些,故了解并记录下 自动化需要操作win7上的一个app,用PyAutoGUI做的,定位坐标,点击鼠标等,但是 ...

  8. PDF文档工具:pdfFactory快照功能详解

    pdfFactory的快照功能,是通过一种类似截图的方式,将文档中的内容,如标题.图片.段落.文字等进行剪切的功能.剪切后的内容会转化为文本框的形式,我们可以对其进行加边框.旋转等编辑处理,但不能对其 ...

  9. wpf采用Xps实现文档显示、套打功能(原创)

    近期的一个项目需对数据进行套打,用户要求现场不允许安装office.页面预览显示必须要与文档完全一致,xps文档来对数据进行处理.Wpf的DocumentView 控件可以直接将数据进行显示,xps也 ...

随机推荐

  1. 廖雪峰Java8JUnit单元测试-2使用JUnit-4超时测试

    1.超时测试 可以为JUnit的单个测试设置超时: 超时设置1秒:@Test(timeout=1000),单位为毫秒 2.示例 Leibniz定理:PI/4= 1 - 1/3 + 1/5 - 1/7 ...

  2. Linux系统编程——水平触发和边沿触发

    事件模型 EPOLL事件有两种模型: Edge Triggered (ET) 边缘触发只有数据到来才触发,不管缓存区中是否还有数据. Level Triggered (LT) 水平触发只要有数据都会触 ...

  3. Hibernate查询部分字段并封装到指定类中

    Hibernate 使用查询部分/指定字段,有几种字现方式: 第一种方式是通过HQL语句实现,类似SQL,方法如下: String hql = "select id,name from Li ...

  4. 序列化模块_pickle

    序列化: 把不能够直接存储的数据变成字节流(bytes)保存在文件, 进行持久化存储 反序列化: 任何数据都可以转成字节流(bytes)进行存储: 1. dumps 把任意对象序列化 li = [1, ...

  5. iOS移动开发CoreDate讲解

    ----欢迎------- 在移动端开发,数据持久化保存是基本要素,没钱在2014年之后退出了coredate,本持久化基于oc作为开发,方便程序人员操作.与SQL数据库,MySQL相比,优点颇多. ...

  6. Allegro16.6 PCB 导入DXF 外框后曲线不闭合

    Allegro16.6 PCB 导入DXF  外框后曲线不闭合,边框不封闭导致的z-copy无法用的问题.解决办法: 菜单栏依次选择 shape--compose shape,options选择好ou ...

  7. quartz.properties完整版

    我们通常是通过quartz.properties属性配置文件(默认情况下均使用该文件)结合StdSchedulerFactory 来使用Quartz的.StdSchedulerFactory 会加载属 ...

  8. 所有设计复杂的ORM都是浮云

    很久没有写文章了. 一直很忙,不是很有时间整理. 今天主要是来吐槽下那些设计很复杂的ORM的. 项目做的越多,越觉得ORM这个东西设计的太复杂实在是没什么意义. 比较推崇Dapper这样比较简单,效率 ...

  9. u盘辨别

    1.从基座颜色上区分: USB2.0接口基座一般为黑色或者白色. USB3.0接口基座为蓝色. 2.从U盘插口针脚区分:USB 2.0是4针脚,而USB 3.0采用了9针脚,针脚比USB2.0多. 3 ...

  10. Bootstrap switch 切换状态踩坑

    Boostrap switch 下载地址(http://www.bootcss.com/p/bootstrap-switch/),同时配有一些简单的用例. 其中写到 Toggle State切换状态的 ...