首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何以编程方式停止在firefox中加载页面?

如何以编程方式停止在firefox中加载页面?
EN

Stack Overflow用户
提问于 2011-03-28 08:10:24
回答 8查看 30.3K关注 0票数 16

我用WebDriver和火狐运行了几个测试。

我在执行以下命令时遇到了问题:

WebDriver.get(www.google.com);

使用此命令,WebDriver将一直阻塞,直到触发onload事件。虽然这通常需要几秒钟的时间,但在永远不会完成加载的网站上可能需要几个小时。

我想要做的是在某个超时后停止加载页面,以某种方式模拟Firefox的停止按钮。

每次尝试加载页面时,我首先尝试执行以下JS代码:

var loadTimeout=setTimeout(\"window.stop();\", 10000);

不幸的是,这不起作用,可能是因为:

由于脚本的加载顺序,

()方法无法停止包含该脚本的文档加载1

更新1:我尝试使用SquidProxy来添加连接和请求超时,但问题仍然存在。

我今天发现的一件奇怪的事情是,我的机器(FF3.6 - 4.0和MacOS10.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(爬行目的)的人,我会更新搜索结果

更新5:更新时间到了。使用了5个月的ghostdriver 1.1而不是FirefoxDriver,我可以说我对他的性能和稳定性真的很满意。我有一些案例,我们没有适当的行为,但看起来一般幽灵司机是足够稳定的。因此,如果你像我一样需要一个浏览器来爬行/抓取网页,我建议你使用ghostdriver而不是firefox和xvfb,这会让你很头疼……

EN

回答 8

Stack Overflow用户

发布于 2014-02-19 00:23:17

我可以通过做一些事情来解决这个问题。

首先,为webdriver设置一个超时。例如,

WebDriver wd;
... initialize wd ...
wd.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS);

其次,在执行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();
    }
 }

这基本上是试图加载页面,但如果超时,它会强制页面停止通过javascript加载,然后再次尝试获取页面。它在你的情况下可能没有帮助,但在我的情况下绝对有帮助,特别是在执行webdriver的getCurrentUrl()命令时,这也可能会花费太长的时间,有一个警告,并要求页面在获得url之前停止加载。

票数 6
EN

Stack Overflow用户

发布于 2011-06-20 16:06:31

我也遇到过同样的问题,似乎没有通用的解决方案。然而,在他们的bug跟踪系统中有一个bug,你可以‘明星’投票给它。

http://code.google.com/p/selenium/issues/detail?id=687

关于这个bug的一个评论有一个可能对你有用的变通方法--基本上,它创建了一个单独的线程,等待所需的时间,然后尝试在浏览器中模拟按下退出,但这需要浏览器窗口在最前面,这可能是一个问题。

http://code.google.com/p/selenium/issues/detail?id=687#c4

票数 2
EN

Stack Overflow用户

发布于 2012-12-07 02:11:21

我的解决方案是使用这个类:WebDriverBackedSelenium

//When creating a new browser:
WebDriver driver = _initBrowser(); //Just returns firefox WebDriver
WebDriverBackedSelenium backedSelenuium = 
            new WebDriverBackedSelenium(driver,"about:blank");    

//This code has to be put where a TimeOut is detected
//I use ExecutorService and Future<?> Object

void onTimeOut()
{
    backedSelenuium.runScript("window.stop();");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5453423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档