我正在使用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,它通常设法在浏览器进入该状态之前终止浏览器。
答案 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")
上查看更多信息
答案 1 :(得分:0)
我提出的最佳策略是终止进程,其运行时间超过设定的阈值(例如孤立进程)。可以通过child_process.execFile('powershell.exe')
调用此代码段。当浏览器挂起时,由于行为不当javascript,这对chromedriver
和webdriverJS非常有用。
# 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