Я пытаюсь создать код, который будет вызывать нажатие кнопки.
Функция сообщит, какая кнопка должна быть нажата. Он проверит, является ли кнопка действительной (от 1 до 4), затем найдет элемент управления навигатором (пользовательский из приложения, которое я пытаюсь автоматизировать, я не могу найти опцию, чтобы заказать его для выполнения определенной), проверьте его цвет соответствует PIL в памяти и, если он действителен, нажмите кнопку и подождите, пока кнопка не изменит цвет, чтобы возобновить код.
from pywinauto import application
import pywinauto
import PIL
import time
from array import *
time.clock()
def sanity_check():
if 'app' not in globals():
global app
app = application.Application()
app.connect(title="Contas a pagar")
if 'screen' not in globals():
global screen
screen = PIL.ImageGrab.grab()
if 'colorsarr' not in globals():
global colorsarr
colorsarr = [[(36, 210, 71),(82, 94, 105)],[(198, 62, 62),(84, 96, 107)],[(174, 218, 201),(169, 187, 207)],[(229, 13, 0),(64, 73, 81)]]
def update_screen():
screen = PIL.ImageGrab.grab()
def click_button(number=1):
if 1 <= number <= 4:
number = int(number)
buttonCoord = int((app.Contas_a_pagar.TBDBNavigator2.rectangle().right - app.Contas_a_pagar.TBDBNavigator2.rectangle().left)/4/2), int((app.Contas_a_pagar.TBDBNavigator2.rectangle().bottom - app.Contas_a_pagar.TBDBNavigator2.rectangle().top)/2)
buttonCoord = app.Contas_a_pagar.TBDBNavigator2.rectangle().left + buttonCoord[0]*(number*2-1),buttonCoord[1]+app.Contas_a_pagar.TBDBNavigator2.rectangle().top
if screen.getpixel(buttonCoord) == colorsarr[number-1][0]:
pywinauto.mouse.click(button='left', coords=(buttonCoord))
while screen.getpixel(buttonCoord) != colorsarr[number-1][1]:
update_screen()
continue
return
elif screen.getpixel(buttonCoord) == colorsarr[number-1][1]:
print("Button unavailable")
return
else:
print("Color check button " + str(number))
return
def automate_things():
sanity_check()
print(time.clock())
for i in range(-3,10):
click_button(i)
print(time.clock())
automate_things()
Моя проблема в том, что моя функция update_screen
должна изменить то, что хранится в переменной screen
, но это не так, делая цикл while бесконечным. Даже если я помещу окно в положение, в котором он захватывает цвет пикселя, оно продолжает получать другой цвет.
Массив colorsarr
имеет по индексу 0 цвет "нажимаемый", а по индексу 1 - цвет "несжимаемый"
Это мой первый код на Python, поэтому, вероятно, я что-то не так делаю. Когда закончите, я попробую обзор кода для лучшего кода. Хотя предложения по улучшению кодирования приветствуются, основное внимание уделяется только тому, почему экранная переменная не обновляется.