首页 > 解决方案 > 尝试更新 PIL.ImageGrab 但它不起作用

问题描述

我正在尝试编写一个需要按下按钮的代码。

一个函数会告诉你要按下哪个按钮。它会检查按钮是否有效(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应该更改存储在 var 中的screen内容,但事实并非如此,从而使 while 循环无限。即使我在它抓取像素颜色的位置上放置一个窗口,它也会不断获得另一种颜色。

colorsarr数组在 0-index 上具有“可压”颜色,在 1-index 上具有“不可压”颜色

这是我的第一个 python 代码,所以可能我做错了什么。完成后,我将尝试代码审查以获得更好的代码。虽然欢迎提出更好编码的建议,但重点是 screen var 不更新的原因。

标签: python-3.xautomation

解决方案


推荐阅读