Проблемы с python autopy / путаница
Так что я пытаюсь сделать скрипт бота, чтобы, когда определенный шестнадцатеричный цвет был на определенном пикселе, он выполнял некоторый код для перемещения мыши, щелчка и т. д., и у меня он был там, где он снимал скриншот каждую 1 секунду в один и тот же файл PNG и обновляет файл png. У меня есть шестнадцатеричный цвет для печати пиксельных шнуров на консоли, чтобы я мог видеть, обновляется ли он или нет. это никогда не обновляет это, только остается тем же самым. Я пытался написать этот сценарий многими способами, и, к сожалению, у меня есть только одна версия, чтобы показать вам, но, надеюсь, вы поймете, чего я пытался достичь. я на питоне 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 ответа
Я считаю, что ваша проблема в том, как вы используете 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 7, клик эффективен, но не очень корректен, чувствую больше похоже на мою работу