如何让Selenium WebDriver不等待整个页面加载

2 投票
2 回答
960 浏览
提问于 2025-04-18 15:51

我正在使用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");
}

撰写回答