我正在使用 WebDriver 和 Firefox 运行几个测试。
我遇到了以下命令的问题:
WebDriver.get(www.google.com);
使用此命令,WebDriver 会阻塞,直到触发 onload 事件。虽然这通常需要几秒钟,但在永远不会完成加载的网站上可能需要几个小时。
我想做的是在某个超时后停止加载页面,以某种方式模拟 Firefox 的停止按钮。
每次尝试加载页面时,我首先尝试执行以下 JS 代码:
var loadTimeout=setTimeout(\"window.stop();\", 10000);
不幸的是,这不起作用,可能是因为:
由于加载脚本的顺序,stop() 方法无法阻止包含它的文档加载1
更新 1:我尝试使用 SquidProxy 来添加连接和请求超时,但问题仍然存在。
我今天发现的一件奇怪的事情是,一个网站在我的机器(FF3.6 - 4.0 和 Mac Os 10.6.7)上从未停止加载,但在其他浏览器和/或计算机上正常加载。
更新 2:这个问题显然可以通过告诉 Firefox 不要加载图像来解决。希望在那之后一切都会好起来……
我希望 WebDriver 有一个更好的 Chrome 驱动程序以便使用它。Firefox 每天都让我失望!
更新 3:Selenium 2.9 添加了一个新功能来处理驱动程序似乎挂起的情况。这可以使用FirefoxProfile
如下:
FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("web");
firefoxProfile.setPreference("webdriver.load.strategy", "fast");
我会在我尝试后发布这是否有效。
更新 4:最后,上述方法均无效。我最终“杀死”了需要很长时间才能完成的线程。我打算尝试Ghostdriver,它是一个使用 PhantomJS 作为后端的远程 WebDriver。PhantomJS 是一个无头的 WebKit 脚本,所以我希望不会有真正的浏览器(如 firefox)的问题。对于没有义务使用 firefox(爬行目的)的人,我将更新结果
更新5:更新时间。使用 ghostdriver 1.1 代替 FirefoxDriver 5 个月,我可以说我对他的性能和稳定性感到非常满意。我遇到了一些情况,我们没有适当的行为,但看起来一般 ghostdriver 足够稳定。因此,如果您像我一样需要用于爬行/网络抓取的浏览器,我建议您使用 ghostdriver 而不是 firefox 和 xvfb,这会让您头疼...