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