所以即时尝试制作一个机器人脚本,当某个十六进制颜色在某个像素上时,它会执行一些代码来移动鼠标,点击等等。我将它带到每隔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
答案 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
请注意,我自己没有运行此代码,因此我无法保证其有效,但我相信它应该。