Ari*_*e82 16 firefox selenium web-crawler ghostdriver
我正在使用WebDriver和Firefox运行几个测试.
我遇到以下命令的问题:
WebDriver.get(www.google.com);
使用此命令,WebDriver将阻塞,直到触发onload事件.虽然这通常需要几秒钟,但在从未完成加载的网站上可能需要数小时.
我想做的是在一定的超时后停止加载页面,以某种方式模拟Firefox的停止按钮.
我每次尝试加载页面时都首先尝试执行以下JS代码:
var loadTimeout=setTimeout(\"window.stop();\", 10000);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,可能是因为:
由于脚本的加载顺序,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");
Run Code Online (Sandbox Code Playgroud)
我会在尝试之后发布这是否有效.
更新4:最后,上述方法均无效.我最终"杀死"了很长时间才完成的线程.我正在尝试使用Ghostdriver,这是一个使用PhantomJS作为后端的远程WebDriver.PhantomJS是一个无头的WebKit脚本,所以我希望不会出现像Firefox这样的真正浏览器的问题.对于没有义务使用firefox(爬行目的)的人,我将更新结果
更新5:更新的时间.使用5个月的ghostdriver 1.1而不是FirefoxDriver,我可以说我对他的性能和稳定性非常满意.我遇到了一些我们没有适当行为但看起来像一般ghostdriver足够稳定的情况.因此,如果您需要像我这样的浏览器来进行爬行/网页抓取,我建议您使用ghostdriver而不是firefox和xvfb,这会给您带来几个令人头疼的问题......
我做了一些事情就能解决这个问题.
首先,为webdriver设置超时.例如,
WebDriver wd;
... initialize wd ...
wd.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
其次,在进行get时,将其包装在TimeoutException周围.(我在那里添加了一个UnhandledAlertException,只是为了很好的衡量.)例如,
for (int i = 0; i < 10; i++) {
try {
wd.get(url);
break;
} catch (org.openqa.selenium.TimeoutException te) {
((JavascriptExecutor)wd).executeScript("window.stop();");
} catch (UnhandledAlertException uae) {
Alert alert = wd.switchTo().alert();
alert.accept();
}
}
Run Code Online (Sandbox Code Playgroud)
这基本上试图加载页面,但如果它超时,它会强制页面停止通过javascript加载,然后尝试再次获取页面.它可能对你的情况没有帮助,但它确实对我有帮助,特别是当做一个webdriver的getCurrentUrl()命令时,也可能需要太长时间,有一个警报,并要求页面在你获得url之前停止加载.
我遇到了同样的问题,似乎没有通用的解决方案。然而,他们的错误跟踪系统中有一个关于它的错误,您可以“加星标”来投票支持它。
http://code.google.com/p/selenium/issues/detail?id=687
关于该错误的评论之一有一种可能对您有用的解决方法 - 基本上,它创建一个单独的线程,等待所需的时间,然后尝试在浏览器中模拟按转义键,但这需要浏览器窗口位于最前面,这可能是一个问题。
http://code.google.com/p/selenium/issues/detail?id=687#c4
| 归档时间: |
|
| 查看次数: |
27355 次 |
| 最近记录: |