3

我有一个网页,我正在等待一个按钮出现,当它出现时我想点击它。该按钮位于计时器上,可能需要一个小时才能出现。另外,如果按钮出现的时间超过一定长度,我想移动鼠标(否则网站会自动注销我)。

所以,为了等待按钮出现,我设计了这个 Sikuli 脚本:

button = "button.png"

while(1):
    if exists(button):
        print("found it")
        click(button)
        break
    else:
        print("wait longer")
        wait(button,30*60)
        # do a regular task

print "all done!"

以上似乎没有功能。如果按钮在屏幕上,脚本会找到它......但是,如果它必须等待它会很快超时并出现 FindFailed 异常(click()即使屏幕上不存在按钮)。我考虑过编写一个处理程序,但似乎有点矫枉过正。

我做错了什么,等待这样的视觉事件很长一段时间的最佳方法是什么?

4

4 回答 4

8

给你一些其他的想法...

 while(1):
 wait(Button, 30*60) # This will spinlock for 30 minutes for the button to appear
 if exists(Button):
     hover(Button) # Debug statement allowing user to see what Sikuli has matched to
     click (Button)
 else:
     mouseMove(Location(50,100))
     mouseMove(Location(50,200))

链接:

于 2012-07-26T18:33:36.640 回答
5

也许Sikuli 认出了一个看起来很像你的按钮的东西,并试图点击它。如果您在 IDE 中右键单击您的按钮模式,您可以微调识别的容差级别。尝试在按钮周围精确剪切图像并增加值以更精确。

我建议您阅读本教程
http://doc.sikuli.org/tutorials/surveillance/surveillance.html
并设置一个事件处理程序以在您的按钮出现时管理您的按钮
http://doc.sikuli.org/region。 html#Region.onAppear
http://doc.sikuli.org/region.html#observingvisualeventsinaregion
写的代码不多。

您可以在此处http://sikuli.org/blog/2011/08/15/sikuli-plays-angry-birds-on-google-games/在 Sikuli 的博客中获得一个带有完整源代码的好示例

我认为你可以设置你的处理程序并使用

观察(永远)

于 2012-07-26T11:19:59.077 回答
1

如果您希望 sikuli 在等待图像时做一些事情,我会使用 onAppear(pic, function) 和 observe(FOREVER, true) 方法,这就是它的工作原理

event = Sikuli.event

def function(event):
    click(yourButton.png)

onAppear(picYourWaitingFor.png, function)
observe(FOREVER, true)

基本上它的作用是 onAppear 会持续扫描屏幕上的 picYourWaitingFor.png。sikuli 在单词之后继续执行,因此它在工作时正在扫描。在所述图片的外观上,它将跳转到您作为 onAppear 的第二个参数设置的函数。

于 2015-03-04T19:19:08.573 回答
0

我有与描述相同的问题。这不是永远等待。并且观察也不起作用,因为它确实会永远观看。考虑只想在特定时间段内检查事件,例如 60 秒。如果没有发生,请继续。这可能发生在一系列特定的事件中。如果图像在 60 秒内没有出现,请继续进行另一个系列。

wait(image,60)

...如果找不到图像,它将在 60 秒后崩溃,这根本不是我想要的。

所以我做了这样的事情:

attempt = 1
count=0
while attempt:
     if exists(image):
         attempt=0
     else:
        count=count+1
        if count>60:
          attempt=0
        else:
           wait(1)

可能是更好的方法并且没有给出确切的时间,但方法不会使脚本崩溃。

您也可以尝试:except it..应该更短。

于 2018-01-01T18:21:42.857 回答