sikuli (python) 脚本从一天中的 xx 小时开始,wait("image.png",highnumber) 不工作?

sikuli (python) script starting at xx hour of the day, wait("image.png",highnumber) not working?

首先感谢所有能帮助我的人

我一直在使用一个程序来自动化我喜欢的游戏中的一些无聊功能,但它不再起作用了。

我想让它做的事情真的很愚蠢,但我没有得到好的结果..所以

1) 因为我需要在准确的时间 运行 它,所以我在论坛上找到了这个,并稍微调整了一下,将其设置为上午 11 点左右开始:

from datetime import datetime  
from threading import Timer

x=datetime.today()  
y=x.replace(day=x.day, hour=11, minute=0, second=20, microsecond=0) 
delta_t=y-x

secs=delta_t.seconds+1

def something():  
    ***Script below***

t = Timer(secs, something)
t.start()

那么,第一部分是否正确?

2) 第二部分是实际的脚本,实际上是这样的:

for x in range (0, 50):
    wait("im0.png"),25)  
    click("im0.png")
    wait("im1.png",15)
    if exists("im2.png"):
        click("im2.png")
    if exists("im3.png",50)
        type("something")
    x +=1

如您所见,我将其设置为等待(或存在)图像 25(15 和 40)秒,但我感觉它不是在等待我设置的那个时间,我不能尝试脚本经常出现,但我认为它纠结于等待图像命令,比如 "FindFailed xxx.png" 等等

我希望它每秒检查一次图像是否存在,然后执行下面的操作(因为它会出现,而且我不希望它跳过任何内容),我是否应该以类似循环的方式更改它"if not exists" 然后它再次检查自己? (这种输入将不胜感激,我不太擅长在 python 中编写脚本)

谁能帮我写成 better/right 的方式?

去罗马的方式有很多,所以没有 1 个好的答案,但还有更多。
如果您想制作一个在给定时间做某事的简单循环,您可以简单地使用:

import time

image1 = ("image1.png")
alarm = '17:37:00'

while (True):
    # Look what time it is right now [24 hour format]. 
    currentTime = time.strftime("%H:%M:%S")
    if (currentTime == alarm):
        print('It is time!')
        # Exit the (while) loop.
        break;

对于第二部分,您也可以让我们成为 while not exists() 要使其更像是一个完整的脚本,您可以使用:

import time

image1 = ("image1.png")
image2 = ("image2.png")
image3 = ("image3.png")
alarm = '17:37:00'

class Robot():
    # Automaticly executes when class is called. 
    def __init__(self):
        # Wait until it is time for the alarm to go off. 
        while (True):
            # Look what time it is right now [24 hour format]. 
            currentTime = time.strftime("%H:%M:%S")
            if (currentTime == alarm):
                print('It is time!')
                # Call another definition. 
                self.startWork()
                # Exit the (while) loop to finsih the script.
                break;

    # Find and click the image. 
    def startWork(self):
        while not exists(image1):
            # We didn't see the image, sleep for 1 second. 
            wait(1)
        # When the code gets here, image1 has appeared. 
        imageLoc1 = find(image1)
        imageLoc1.click()
        # Now we are going to look if we see eather image2 or image3
        while not exists(image2) or not exists(image3):
            wait(1)
        # Image2 or image3 is seen. 
        if exists(image2):
            imageLoc2 = find(image2)
            imageLoc2.click()
        elif exists(image3):
            imageLoc3 = find(image3)
            imageLoc3.click()

# Run class 
Robot()

要使循环 while not exists() 在图像未出现一定时间后也结束,您可以使用:

i = 0
while not exists(image1):
    i = i + 1
    wait(1)
    # After 60 seconds break the loop anyway. 
    if (i == 60):
        break