python 尸检 problems/confusion

python autopy problems/confusion

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

我认为您的问题在于您的使用方式 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

请注意,我自己没有 运行 这个代码,所以我不能保证它有效,但我相信它应该有效。

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

我在别人的代码中看到需要这样做,但我不明白为什么我在 Windows 上测试时要在 click.In 事实之后使用 up 和 down 7,点击是有效的,但是不是很正确,感觉比较像我操作的down