如何让Selenium WebDriver不等待整个页面加载
我正在使用Python 2.7和Selenium WebDriver来操作Firefox,但遇到了一个我无法解决的问题,也找不到相关的解决办法。我的任务是打开大约1万个网页(这些是ADSL路由器的网页接口,通过IP地址访问),并上传新的固件。我已经写好了代码,但为了完成它,我需要学习如何让Selenium WebDriver在加载页面时不要一直等下去,而是等2分钟(这是上传新固件所需的时间),然后再进行下一步操作。
我本来想让它一直等下去(等路由器重新连接——虽然速度慢,但我可以自己搞定),但问题是,当我点击上传按钮时,上传新固件需要2分钟,然后路由器会重启以应用更改(这需要不到2分钟),接着尝试连接(大约需要10秒),即使在这个过程中如果它获得了其他IP地址,页面也不会加载,我的程序就会一直等下去。
所以,我想跳过这些步骤,让程序在前2分钟后就继续到下一个路由器。这样可以实现吗?我看到有提到“pageLoadingStrategy”,但我不太明白该怎么用。
如果我的表达不清楚,请告诉我,因为英语不是我的母语。下面是代码示例,在button.submit()之后,它应该等2分钟再继续,而不是一直等下去:
def firmware_upload():
global ip
br.get("http://"+ip+"/upload.html")
button = br.find_element_by_xpath('//input[@type="file" and @name="filename"]')
button.send_keys("/home/djura/Downloads/KW5815A_update_140417")
button.submit()
print ("Odradjen UPDATE SOFTWARE-a!")
return
2 个回答
0
这个问题可能是因为你使用了 button.submit
,如果我没记错的话,这个会等着动作完成后再返回结果。所以你应该找到真正的 提交按钮,然后用 click
来点击它,比如:
submit_button = br.find_element_by_id('SUBMIT_BTN_ID')
submit_button.click()
顺便说一下,你的示例代码中,button
这个变量实际上指的是一个输入元素,这一点可能会让人感到困惑。
1
看看这个是否有效。
try
{
br.manage().timeouts().pageLoadTimeout(2, TimeUnit.MINUTES);
global ip
br.get("http://"+ip+"/upload.html")
button = br.find_element_by_xpath('//input[@type="file" and @name="filename"]')
button.send_keys("/home/djura/Downloads/KW5815A_update_140417")
button.submit()
print ("Odradjen UPDATE SOFTWARE-a!")
return
}
catch(TimeoutException e)
{
print("2min over");
}