我有一个网页,我正在等待按钮出现,当它出现时我想点击它。该按钮位于计时器上,可能需要一个小时才能显示。此外,如果按钮的显示时间超过一定时间,我想移动鼠标(否则网站会自动将我注销)。
所以,等待按钮出现我设计了这个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()
上,即使屏幕上不存在该按钮) 。我考虑过写一个处理程序,但看起来有些过分。
我做错了什么,等待这么长时间的视觉事件的最佳方法是什么?
答案 0 :(得分:6)
其他一些想法...
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))
链接:
答案 1 :(得分: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
写的代码不多。
您可以在Sikuli的博客中获得完整源代码的好例子 http://sikuli.org/blog/2011/08/15/sikuli-plays-angry-birds-on-google-games/
我认为您可以设置处理程序并使用
观察(永远)
答案 2 :(得分:1)
如果你希望sikuli在你等待图像的时候做东西,我会使用onAppear(pic,function)和观察(FOREVER,true)方法,这就是它的工作原理
event = Sikuli.event
def function(event):
click(yourButton.png)
onAppear(picYourWaitingFor.png, function)
observe(FOREVER, true)
基本上它的作用是onAppear会不断扫描屏幕上的picYourWaitingFor.png。 sikuli继续执行单词,因此它在工作时扫描。在所述pic的外观上,它将跳转到你放下的函数作为onAppear的第二个参数。
答案 3 :(得分: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..
应该更短。