Phantom.js是否捕获所有AJAX?

时间:2013-02-07 09:25:29

标签: javascript backbone.js phantomjs

我有一个拥有大量AJAX的骨干应用程序。 (每个页面加载导致5-6个ajax调用)因为我在这些视图中有很多视图和内部视图,

如果我运行Phantom.js,我能获得最终的html结果吗?

最终结果是用户在所有ajax调用运行后看到的内容。

4 个答案:

答案 0 :(得分:35)

PhamtonJs是一款带有JavaScript API的无头WebKit。在抓取页面时,PhatomJs将下载所有依赖请求,例如images,js,css ......它还将执行JS和ajax调用。 但是,在页面完成加载时调用onLoaded回调,而不是在没有挂起请求时调用。所以,你必须使用一个技巧。

有两种方法可以解决问题:

  • 等到你的页面(一个元素)有效地改变了“某事”。最好的例子是waitFor.js
  • 等待几秒钟直到没有收到任何请求。

答案 1 :(得分:11)

Phantom.js能够在你的页面中运行javascript,所以这应该有效。有一个article描述了如何使用Phantom.js为抓取工具提供漂亮版本的javascript网站。

一定要给Phantom.js足够的时间来完成ajax调用,就像thread describes一样。

答案 2 :(得分:1)

你可以使用$ .active和waitFor.js脚本一起返回服务器的活动连接数,我们需要等待它为0才能完成所有请求。

更多信息:jQuery.active function

答案 3 :(得分:0)

如果您可以访问网站的javascript代码,除了waitFor()之外,我认为您可以使您的ajax请求同步。它有时更简单,更准确。