1

我正在使用 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 足够低,它通常会设法在浏览器进入该状态之前将其杀死。

4

2 回答 2

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 总部查看更多信息

于 2013-01-25T21:11:48.380 回答
0

我想出的最佳策略是终止运行时间超过设定阈值的进程(例如孤立进程)。这个片段可以通过调用child_process.execFile('powershell.exe')。当浏览器由于 JavaScript 行为不端而挂起时,发现这对chromedriverwebdriverJS很有用。

清理孤立进程(运行时间 >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
于 2017-06-20T14:18:42.603 回答