美文网首页用户模拟爬虫技术
PyAutoGui 图片识别+定位+截图函数文档

PyAutoGui 图片识别+定位+截图函数文档

作者: Simon0903 | 来源:发表于2018-09-13 16:59 被阅读1364次

    前言:

    本章节有个非常重要的函数 locateCenterOnScreen!

    如果你有一个图像文件,你可以在屏幕上直观地定位一些东西。

    它直接返回x,y坐标点,返回值可以给click()

    PyAutoGUI可以获取屏幕截图,将它们保存到文件中,并在屏幕中识别并定位图像。这是有用的,如果你有一个小的图像,比方说,一个按钮,需要点击,并希望找到它在屏幕上。这些特性由PyScreeze模块提供,该模块与PyAutoGUI一起安装

    作者:Simon0903

    链接:https://www.jianshu.com/u/2b4bc3b5e6fc

    來源:简书

    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


    截图功能需要依赖pillow模块。

    OSX使用screencapture命令,它与操作系统一起提供。

    Linux使用scrot命令,可以通过运行sudo apt-get install scrot.


    关于Ubuntu的特别说明

    Ubuntu在安装 pillow 方面似乎有一些缺陷。PNG和JPEG支持不包括在Ubuntu上的pillow中。以下链接有更多信息:https://stackoverflow.com/questions/7648200/pip-install-pil-e-tickets-1-no-jpeg-png-support http://ubuntuforums.org/showthread.php?t=1751455

    import pyautogui as auto



    屏幕截图()函数

    screenshot()

    将返回 Image 对象(有关详细信息,请参阅枕头或PIL模块文档)。传递文件名的字符串将屏幕快照保存到文件中,并将其作为Image对象返回。

    #  有一个可选的 region 关键字参数,如果不希望看到整个屏幕的截图。

    # 可以传递区域的左、顶、宽和高的四个整数元组来捕获:

    pic_1 = auto.screenshot()

    pic_2 = auto.screenshot('my_screenshot.png') #在1920 x 1080屏幕上,screenshot()函数大约需要100毫秒

    pic_3 = auto.screenshot("my_screenshot.png ",region=(0,0, 300, 400))

    定位函数 (非常重要) 

    在#1920 x 1080屏幕上,定位函数调用大约需要1或2秒 ,不适用于游戏脚本调用,原因是太慢

    locateOnScreen()

    例如,假设计算器应用程序在您的计算机上运行,如下所示:

    # 当启动计算器界面的时候,这时您不能直接调用moveTo()和click()函数,如果您不知道计算器按钮的确切屏幕坐标。

    # 每次启动时,计算器都会出现在一个稍微不同的地方,因此每次都需要重新查找坐标。

    # 但是,如果您有该按钮的图像,例如7按钮的图像:

    # 就直接用图片识别功能定位它的屏幕坐标(是元组,左、上、右、下),这个返回结果(元组)也可以给center()函数方法,转化成x,y的坐标值

    # 如果屏幕上找不到图像,locateOnScreen()  则返回结果为:None.

    number7_location = auto.locateOnScreen('calc7key.png')   #传入按钮的图片

    print(number7_location)  # 返回屏幕所在位置

    >>>(1416, 562, 50, 41)

    x,y = auto.center(number7_location )  # 转化为 x,y坐标

    print(number7_location)  #按键7的坐标是1441,582

    >>> (1441, 582) 

    auto.click(number7_location) 

    # 点击坐标,click()它是支持元组格式的坐标传入的

    #根据图片识别定位x,y坐标(比较好用)

    locateCenterOnScreen(image, grayscale=False)

    返回找到的第一个截图Image对象在屏幕上的中心坐标(x, y),如果没找到返回None

    auto.locateCenterOnScreen('1.png',grayscale=False)

    #  参数grayscale是是否转灰度

    >>> (1441, 582) 

    locateAllOnScreen(image, grayscale=False)

    # 返回找到的所有相同截图Image对象屏幕上的坐标,返回结果是(left, top, width, height)的‘生成器’

    auto.locateAllOnScreen('xxx.png',grayscale=False)  #遍历找到屏幕上所有显示为xxx的图像对象坐标,转灰度操作=关闭

    locate(needleImage, haystackImage, grayscale=False)

    auto.locate('xxx.png')

    # 返回找到的第一个截图Image对象在haystackImage里面的坐标(left, top, width, height),如果没找到返回None

    locateAll(needleImage, haystackImage, grayscale=False)

    auto.locateAll('xxx.png')

    # 返回找到的所有相同截图Image对象在haystackImage里面的坐标(left, top, width, height)的生成器

    相关文章

      网友评论

        本文标题:PyAutoGui 图片识别+定位+截图函数文档

        本文链接:https://www.haomeiwen.com/subject/xsdwgftx.html