Selenium确定浏览器被冻结

时间:2013-01-25 18:21:30

标签: python browser selenium

我正在使用selenium做一些涉及加载大量页面的东西,可能包含大量图片和/或Flash广告,这显然在浏览器上非常紧张,因为我的firefox浏览器很冷。 selenium是否能够检测浏览器是否被冻结,因为在任务管理器中已达到“无响应”的可怕状态,并且如果我单击选项卡则不会聚焦? 如果没有,有人知道处理这种情况的方法吗?

编辑:

我最终使用了以下内容:

  browser = webdriver.Firefox()
  try:
    browser.set_page_load_timeout(_DEFAULT_LOAD_TIME)
    browser.get('http://' + domain)
  except TimeoutException as te:
    print "Loading %s timed out. Killing browser." % domain
    print te
    browser.close()

虽然它没有关闭浏览器,如果它进入(没有响应)状态,但是具有足够低的_DEFAULT_LOAD_TIME,它通常设法在浏览器进入该状态之前终止浏览器。

2 个答案:

答案 0 :(得分:2)

至少可以为Selenium设置超时。在以下示例中,webdriver将在杀死浏览器并且未通过测试之前等待最多10秒。通过这种方式,您可以最终执行所有测试。

from selenium import webdriver

ff = webdriver.Firefox()
ff.implicitly_wait(10) # seconds
ff.get("http://somedomain/url_that_delays_loading")
myDynamicElement = ff.find_element_by_id("myDynamicElement")

Selenium headquarters

上查看更多信息

答案 1 :(得分:0)

我提出的最佳策略是终止进程,其运行时间超过设定的阈值(例如孤立进程)。可以通过child_process.execFile('powershell.exe')调用此代码段。当浏览器挂起时,由于行为不当javascript,这对chromedriver和webdriverJS非常有用。

清理孤立进程(运行时间> 30分钟)

# View Processes Running > 30 MIN
Get-Process -name firefox | ? { $_.StartTime -lt (Get-Date).AddMinutes(-30) } | select pid, starttime | Sort-Object starttime

# Terminate Processes Running > 30 MIN
Get-Process -name firefox | ? { $_.StartTime -lt (Get-Date).AddMinutes(-30) } | Stop-Process -Force