2013-02-07 28 views
25

我有一個擁有大量AJAX的骨幹應用程序。 (每頁加載結果5-6 ajax調用),因爲我有這些意見內的許多意見和內部意見,Phantom.js是否捕獲所有的AJAX?

如果我運行Phantom.js,我可以得到最終的html結果?

最終結果是用戶在我的所有ajax調用運行後看到的內容。

+5

爲什麼不自己嘗試? –

+0

你對'最終的HTML'是什麼意思?你的意思是像「document.body.innerHTML」? – 11684

回答

35

PhamtonJs是一款帶JavaScript API的無頭WebKit。當抓取一個頁面時,PhatomJs將下載所有的依賴者請求,比如圖像,js,css ...它也會執行JS和ajax調用。 但是,onLoaded回調在頁面完成加載時調用,而不是在沒有掛起的請求時調用。所以,你必須使用這個技巧。

有解決問題的雙向:

  • 等待,直到「東西」在你頁面(元素),有效地改變。最好的例子是waitFor.js
  • 等幾秒鐘,直到沒有收到請求。
+3

waitFor.js是否有node.js模塊?我在node.js中使用phamtom.js ... – TIMEX

+0

並不真正知道node.js。但是waitFor.js是你必須做的一個基本例子。我相信你可以在你的情況下輕鬆使用它。 – Cybermaxs

11

Phantom.js能夠在您的頁面中運行JavaScript,所以這應該工作。有一個article描述如何使用Phantom.js爲抓取工具提供很好的javascript網站版本。

一定要給Phantom.js足夠的時間來完成ajax調用,因爲這個thread describes

1

您可以使用$ .active以及waitFor.js腳本,該腳本返回到服務器的活動連接的數量,並且我們需要等待所有請求完成爲0。

更多信息:jQuery.active function

0

如果你從waitFor()方式訪問網站的JavaScript代碼,放在一邊,我覺得你可以讓你的Ajax請求同步。它有時更簡單,更準確。