【问题标题】:How to save contents of AJAX request using PhantomJS如何使用 PhantomJS 保存 AJAX 请求的内容
【发布时间】:2014-10-01 23:19:31
【问题描述】:

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

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

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

到目前为止的代码:

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);

【问题讨论】:

标签: javascript ajax phantomjs


【解决方案1】:

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

  • 如果可以重放 AJAX 请求(对同一 URL 的多个请求每次都会产生相同的响应),那么您可以在 onResourceReceived 处理程序中发出自己的 AJAX 请求,并使用 @987654324 将响应保存到文件中@模块。
  • 相同 URL 的 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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多