gpt4 book ai didi

firefox - 如何以编程方式停止Firefox中的页面加载?

转载 作者:行者123 更新时间:2023-12-03 15:00:25 25 4
gpt4 key购买 nike

我正在使用 WebDriver 和 Firefox 运行多个测试。

我在使用以下命令时遇到问题:
WebDriver.get(www.google.com);
使用此命令,WebDriver 会阻塞,直到触发 onload 事件。虽然这通常需要几秒钟,但在从未完成加载的网站上可能需要几个小时。

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

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

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

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

Because of the order in which scripts are loaded, the stop() method cannot stop the document in which it is contained from loading 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 是一个 headless WebKit 脚本,所以我希望不会有像 firefox 这样的真实浏览器的问题。对于没有义务使用 Firefox(爬网目的)的人,我将更新结果

更新 5:更新时间。使用 ghostdriver 1.1 代替 FirefoxDriver 5 个月,我可以说我对他的性能和稳定性非常满意。我遇到了一些情况,我们没有适当的行为,但看起来一般来说 ghostdriver 已经足够稳定了。因此,如果您像我一样需要用于抓取/网页抓取的浏览器,我建议您使用 ghostdriver 而不是 firefox 和 xvfb,这会让您头疼...

最佳答案

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

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

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

其次,在执行 get 时,将其包装在 TimeoutException 周围。 (我在那里添加了一个 UnhandledAlertException catch 只是为了更好的衡量。)例如,
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 之前停止加载。

关于firefox - 如何以编程方式停止Firefox中的页面加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com