我制作了一个使用Selenium Webdriver模块浏览网站的机器人。不幸的是,我注意到脚本会在尝试单击按钮时停止。代码很简单。我试着点击按钮,如果我不能等一下再试一次。它有效,但在看似随机的时间(有时在10分钟后,有时在几个小时后),它只是在点击按钮后停止。
while 1:
try:
#Try to click the button
confirmButton = driver.find_element_by_name("confirm")
confirmButton.click()
#If we can't, wait a second and try again
except:
time.sleep(1)
我一直在考虑创建一些方法来检测这一点,从而能够暂停当前的点击尝试,但我似乎无法弄清楚如何。单线程的脚本,我不能使用简单的日期时间技术,因为它永远不会运行该检查,因为它仍然在等待按钮完成点击。
编辑:有人问我,我是怎么知道它是悬挂的,而不仅仅是无限期地重试。我做了一个测试,在那里我为执行的每一行打印了一个数字,当我发生挂起时,它不会执行confirmButton.click()
下面的任何一行。我认为这证明它是悬挂而不是无限期重试。或许不是吗?
答案 0 :(得分:0)
你的问题可以通过超时解决:在一个单独的线程中启动一个函数,如果函数没有完成,在一定的时间限制后停止。
以下是示例
from threading import Thread
from time import sleep
def threaded_function():
confirmButton = driver.find_element_by_name("confirm")
confirmButton.click()
if __name__ == "__main__":
thread = Thread(target = threaded_function)
thread.start()
thread.join(1)# this means the thread stops after 1 second, even if it is not finished yet
print ("thread finished...exiting")
希望有所帮助,并告诉我它是否解决了问题。