1

所以我试图制作一个机器人脚本,当某个十六进制颜色出现在某个像素上时,它将执行一些代码来移动鼠标、单击等,我将它设置为每 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
4

2 回答 2

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上测试的时候,点击是有效的,但是不是很正确,感觉更像是我的操作

于 2016-07-15T07:45:20.093 回答
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自己的功能。只需将 if 语句放在您的 while 循环中即可。我把它留给你了。

你想要的是这样的。

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

请注意,我自己没有运行此代码,因此我不能保证它可以正常工作,但我相信它应该可以。

于 2016-04-13T14:39:53.573 回答