python autopy问题/混乱

时间:2016-04-13 14:28:10

标签: python bitmap autopy

所以即时尝试制作一个机器人脚本,当某个十六进制颜色在某个像素上时,它会执行一些代码来移动鼠标,点击等等。我将它带到每隔1秒截取一次的屏幕截图相同的png文件并更新png文件的图片。我有像素线的十六进制颜色打印到控制台,所以我可以看到它是否更新。它永远不会更新它只是保持不变。香港专业教育学院尝试过多种方式编写这个脚本,遗憾的是我只有一个版本向您展示,但希望您能理解我想要完成的任务。我在python 2.7顺便说一句。谢谢大家的时间!!!!

import autopy
from time import sleep

color_grabber =    hex(autopy.bitmap.Bitmap.open("screen1.png").get_color(292,115))


def color_checker():
    global color_grabber
    color_grabber = color_grabber
    return

def mouse_move_click():
    autopy.mouse.smooth_move(433,320)
    autopy.mouse.click()

def screen_grab():
    autopy.bitmap.capture_screen().save("screen1.png")  

def the_ifs(mouse_move_click):
    if color_checker == "0xffcb05":
        mouse_move_click()

while 1==1:
    sleep(1)
    screen_grab()
    color_checker()
    the_ifs(mouse_move_click)
    print color_grabber

2 个答案:

答案 0 :(得分:1)

from autopy.mouse import LEFT_BUTTON
autopy.mouse.click(LEFT_BUTTON)
autopy.mouse.toggle(True, LEFT_BUTTON)
autopy.mouse.toggle(False, LEFT_BUTTON)

我认为有必要在其他人的代码中执行此操作,但我不明白为什么要在点击后使用上下。事实上当我在Windows 7上测试时,请点击是有效,但不是很正确,感觉更像是我的操作

答案 1 :(得分:0)

我相信您的问题是您使用color_grabber的方式。说color_grabber = color_grabber什么都不做。您的代码中发生的事情是,当您运行它时,在导入之后,您将color_grabber的值定义为图像中的颜色。然后你的while循环执行,在那个循环中你调用color_checker。此函数从全局命名空间引入变量color_grabber,然后将该变量设置为等于其自身。您首先不会重新执行用于定义color_grabber的命令。您只需将颜色值存回自身,这样就不会发生变化。

您在调用mouse_move_click函数方面也存在问题。您不想传递函数名称,因为这不是必需的。但是,您还执行了检查color_checker == "0xffcb05",它将您的函数(函数本身,而不是返回值)与十六进制代码进行比较。这对你没什么好处。你想比较颜色。解决方案是将颜色传递给the_ifs并使用该颜色与十六进制代码进行比较。我应该注意,你不需要让the_ifs成为自己的功能。只需在你的while循环中输入if语句即可。我离开了你的方式虽然如此。

你想要的是这样的。

import autopy
from time import sleep

def color_checker():
    color_grabber = hex(autopy.bitmap.Bitmap.open("screen1.png").get_color(292,115))
    return color_grabber

def mouse_move_click():
    autopy.mouse.smooth_move(433,320)
    autopy.mouse.click()

def screen_grab():
    autopy.bitmap.capture_screen().save("screen1.png")  

def the_ifs(color):
    if color == "0xffcb05":
        mouse_move_click()

while 1==1:
    sleep(1)
    screen_grab()
    color = color_checker()
    the_ifs(color)
    print color

请注意,我自己没有运行此代码,因此我无法保证其有效,但我相信它应该。