关于python:Sikuli:如何让程序捕获部分屏幕并存储为图像

Sikuli: How to get program to capture part of the screen and store as image

所以我想捕获一个图像,图像s,它总是在同一个区域。 它然后消失,可能会或可能不会重新出现在不同的区域。

我希望程序在第一次出现时捕获,如果它重新出现在其他区域,则单击一组按钮,否则转到另一个功能。

另一件事是每次调用函数时图像的更改,但它保持在同一位置。

以下是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def playLoop():

s = capture(firstRegion)
warnBox = exists("1443867801301.png")
if not warnBox:
    if exists("1443867813008.png"):
        click(x)
        playLoop()
    else:
        if secondRegion.exists(Pattern(s).similar(0.8)):
            wait(3)
            click(x)
            playLoop()
        else:
            loopLoop()
else:
    doubleClick(y)
    if secondRegion.exists(Pattern(s).similar(0.8)):
            wait(3)
            click(x)
            playLoop()
    else:            
        loopLoop()

我没有错误,但它似乎不起作用。 有任何想法吗?


  • 我想你应该改变这个:
    s = Screen.capture(firstRegion)
    为了这:
    s =捕获(firstRegion)
  • 您可以使用find(image)获取坐标:
    f = find(s)
    x = getX()
    y = getY()
  • 最后,如果你想获得次数,你可以将一个变量传递给函数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    def playLoop(times,x,y):

        s = capture(firstRegion)
        t = find(s)
        if times==0:
            warnBox = exists("1443867801301.png")
            if not warnBox:
                if exists("1443867813008.png"):
                    click(x)
                    times+=1
                    playLoop(times,t.getX(),t.getY())
        if times != 0:
            warnBox = exists("1443867801301.png")
            if not warnBox:
                if t.getX() != x or t.getY() != y: #different location
                    doSomething()
                else:
                    otherFunction() #same location
                times+=1

    PD:Sry,如果我的英语不好:)


  • 要查看region2中是否存在region1,您可以使用if region2.exists(region1) then