循环播放直到屏幕变化

时间:2019-04-24 02:53:21

标签: python-3.x

我正在尝试使SAP中的某些东西自动化。为此,我输入了交易代码,然后按Enter键(使用pywinauto完成)。现在,屏幕应更改并转到“ screen2”。但是,有时由于网络速度慢,需要很多时间才能进入“ screen2”。如果发生这种情况,我的下一行代码(将在下一个屏幕中输入一些文本(再次由pywinauto键盘模块完成))尚无该输入文本的字段,因此脚本将引发错误。我可以花很长的时间time.sleep(),但是当网络速度很好时(这是大多数时间),那么,长时间的睡眠浪费了时间,这破坏了我要尝试做的事情,这是为了节省时间时间。

我有只在“ screen2”上可用的图像。因此,在我按Enter键之后,我想每0.5秒用代码pyautogui.locateOnScreen(r'CrtDocScreen.png', confidence =0.8)在屏幕上搜索一次图像,直到找到图像为止。找到图像后,我们知道我们位于“ screen2”上,我们可以继续。我只是无法完成这部分,因为当pyautogui.locateOnScreen找不到图像时,它会抛出“ ImageNotFoundException”,并且我知道如何将其作为结果并继续循环图像搜索。

请帮助!

1 个答案:

答案 0 :(得分:0)

我创建了以下函数,该函数将寻找下一个屏幕10秒钟,然后中止。如果在10秒内找到所需的屏幕,则循环将中断,程序将继续。

对于以下功能,您必须  1.从datetime导入datetime  2.导入pyautogui  3.从pyscreeze导入ImageNotFoundException

NededScr是带有图像文件的变量(例如:“ landingscreen.png”)。因此,NededScr = r“ landingscreen.png”

def Waitfor (NededScr):
startloop_time = datetime.now()
while True:
    try:
        pyautogui.locateOnScreen(NededScr, confidence =0.8)
        break
    except ImageNotFoundException:
        time_delta = datetime.now() - startloop_time
        if time_delta.total_seconds() >= 10:
            print("Could not find the required screen. Document creating for this order aborted")
            break
        pass