写了一个使用selenium操作IE自动填充表单的脚本。
数据填充到表单后,网页会有ajax请求到后台验证数据的有效性,如果有问题就会弹窗提示。
class UnexpectedAlertPresentException(WebDriverException):
"""
Thrown when an unexpected alert is appeared.
Usually raised when when an expected modal is blocking webdriver form executing any
more commands.
"""
如果出现了modal弹窗,程序再执行其他命令就会报错。
但问题是因为ajax请求有网络延时,我并不知道什么时候会出现modal弹窗。
如果每填一个数据就等待足够长的时间,应该可以捕获到弹窗:
try:
driver.find_element_by_id("xxx").send_keys('xxxx')
time.sleep(long_time)
except UnexpectedAlertPresentException as e:
print str(e)
但是long_time
设置太长会降低自动填表效率,太短有很有可能捕获不到因网络阻塞来的比较慢的弹窗。
请问有没有方法既有比较好的效率,又能捕获到弹窗的提示?
类似于
WebDriverWait(ff,60000).until(EC.visibility_of_element_located((By.XPATH,"//*[@id='dojox_grid_EnhancedGrid_0']")))
就可以了。