driver.get()耗时过长,如何设置超时方法处理?
我需要测试的网站通常加载时间很长,每次测试的时候我都不想等太久,所以我花了几乎一整天在网上寻找解决办法。不过,我还是没找到一个完美的解决方案。
我遇到的主要问题是,当我打开一个新页面,比如用driver.get()的时候,加载时间太长。虽然我期待的元素已经出现了,但我在运行脚本的时候,还是得手动点击几次Chrome的停止按钮。
这是我之前尝试过的方法。
def timeout(func):
def wrapper(*args, **kwargs):
try:
driver.set_page_load_timeout('10')
func(*args, **kwargs)
except Exception:
print('This fucking function takes too long to finish!')
finally:
driver.execute_script('window.stop();')
return wrapper
我用这种方式来使用它:(举个例子)
url = 'http://igame.163.com'
@timeout
def openwebsite(url):
driver.get(url)
openwebsite(url)
但是,脚本经常会抛出超时异常,或者说没有这个元素,或者在其他地方不可点击。如果我删除上面的代码,就不会抛出任何异常。
我只想找到一种方法,当加载一个页面的时间超过我之前设置的超时时间时,脚本能自动点击Chrome的停止按钮。我相信我需要的所有元素都已经加载完成了。
附注:我用Python 3.4写Selenium脚本,浏览器是Chrome,操作系统是Win7 X64。