2014-10-01 71 views
3

我試圖不斷更新網頁上的數據。在Google Chrome開發者工具中,我可以看到我的傳入數據是通過AJAX請求獲取的。如何使用PhantomJS保存AJAX請求的內容

當我點擊'got'文本文件時,我可以在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); 
+0

可能的重複[如何使用casperjs捕獲和處理來自XHR響應的數據?](http://stackoverflow.com/questions/24555370/how-can-i-catch-and-process-the-數據從最XHR - 響應 - 使用-casperjs)。雖然這個問題是關於CasperJS的,但大部分代碼都可以直接轉換爲普通的PhantomJS。 – 2014-10-01 23:46:26

+0

感謝您的回覆,是的,看起來答案可能在於其他問題。我會看看它。 – rwolst 2014-10-02 00:22:32

回答

1

目前,這是不可能的PhantomJS。它不公開這些回調中的請求/響應內容。可能的解決方法是:

  • 如果AJAX請求可以被重放(多個請求相同的URL產生相同的反應每次),那麼你可以在onResourceReceived處理自己的AJAX請求,並保存響應成使用fs模塊的文件。
  • 對同一個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?