0

我有以下代码在找不到end_turn图像时总是返回 findfailed 错误。

def clickCards():
    # region.wait(end_turn,90)
    # search for the cards and click all of them
    if exists(zero):
        z = region.findAll(zero)
        for i in z:
            click(i)
            sleep(1)
    else:
        pass
                     
    if exists(one): 
        o = region.findAll(one)
        for i in o:
            click(i)
            sleep(1)
    else:
        pass

    click(end_turn)

while exists(level):
    
    with region:
        
        if exists(end_turn):
            clickCards()
        elif exists(victory):
           click(victory)
        else:
            wait(end_turn,90)

我正在尝试自动化以下游戏视觉效果:

  • 纸牌游戏开始
  • 在结束按钮可用时单击卡片
  • 用结束转弯按钮结束转弯
  • 继续玩直到我赢
  • 胜利出现,不再可见结束转弯按钮
  • 点击胜利图片

该脚本将运行,但是当我获胜时,它会出现找不到end_turn按钮的错误。

错误信息:

[error] script [ axieTest ] stopped with error at line --unknown--
[error] Error caused by: Traceback (most recent call last): File "C:\Users\Mortada\Desktop\axieTest.sikuli\axieTest.py", line 47, in <module> wait(end_turn,90) File "C:\Users\Mortada\AppData\Roaming\Sikulix\Lib\sikuli\Sikuli.py", line 69, in wait return SCREEN.wait(target, timeout) Line 2761, in file Region.java 
at org.sikuli.script.Region.wait(Region.java:2761)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
org.sikuli.script.FindFailed: FindFailed: end_turn.png: (129x48) seen at (1439, 676) with 1.00 in R[322,156 1278x763]@S(0) E:Y, T:3.0 Line 2761, in file Region.java 
4

1 回答 1

0

我有一个类似的问题。幸运的是,在这种情况下,文档很好。 https://sikulix-2014.readthedocs.io/en/latest/region.html#exceptionfindfailed

它的设计会在找不到匹配项(隐式或显式)时region.findAll()引发异常。FindFailed在您的情况下,我认为它是操作期间的隐式调用click()

幸运的是,Sikuli 通过让人们切换此异常来提供出路。

您可以使用setThrowException()为区域切换此异常。

def clickCards():
# region.wait(end_turn,90)
# search for the cards and click all of them
region.setThrowException(False)
if exists(zero):
    z = region.findAll(zero)
    for i in z:
        click(i)
        sleep(1)
else:
    pass
                 
if exists(one): 
    o = region.findAll(one)
    for i in o:
        click(i)
        sleep(1)
else:
    pass

click(end_turn)
于 2021-12-08T11:15:19.037 回答