如何使用PhantomJS保存AJAX请求的内容

时间:2014-10-01 23:19:31

标签: javascript ajax phantomjs

我正在尝试不断更新网页上的数据。在Google Chrome开发人员工具中,我可以看到我的传入数据是通过AJAX请求获得的。

当我点击'得到'文本文件,我可以在Google Chrome中看到我想要的数据。我想使用PhantomJS接收AJAX响应,然后将这些响应保存到文件中。

到目前为止,我有一个程序打开我感兴趣的网页的网址,可以打印出正在接收的网络流量的概述,但我不知道如何保存实际文件当他们进来时。我该怎么做?

到目前为止

代码:

var page = require('webpage').create();
var url = "www.site_of_interest.com";
page.onResourceRequested = function(request) {
      console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function(response) {
      console.log('Receive ' + JSON.stringify(response, undefined, 4));
};
page.open(url);

1 个答案:

答案 0 :(得分:1)

目前,PhantomJS无法做到这一点。它不会在这些回调中公开请求/响应内容。可能的解决方法是:

  • 如果可以重放AJAX请求(每次对同一个URL的多个请求产生相同的响应),那么您可以在onResourceReceived处理程序中创建自己的AJAX请求,并使用fs模块。
  • 同一网址的AJAX响应意味着页面中的某些内容会发生变化。您可以编写自定义代码来检查DOM是否有这些更改,并推断出AJAX请求可能是什么。它不一定是DOM。也许数据可以从页面上下文的某些JavaScript变量中访问,或者保存在localStorage中 也可以将自定义XMLHttpRequest实现编写为代理,以保存响应以便可以获取它们。必须在任何页面JavaScript运行之前注入它。所以page.onInitialized处理程序效果最好。

我写了一篇关于CasperJS的解决方法的文章,但它们可以很容易地转换为与普通PhantomJS一起使用:A: How can I catch and process the data from the XHR responses using casperjs?