Selenium 如何判断浏览器是否被冻结
我正在用selenium做一些事情,这涉及到加载很多页面,可能还有很多图片和闪动的广告,这对浏览器来说压力很大,所以我的火狐浏览器经常卡住。
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
我想到的最佳方法就是直接结束那些运行时间超过设定阈值的进程(比如说孤儿进程)。这个代码片段可以通过 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
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官网