2012-01-31 59 views
0

我目前正在使用不同的刮擦技術,並發現,它可以很快就會變得很複雜,當涉及大量的JavaScript。 我在HTMLUnit方面取得了一些成功,它似乎很好地解釋了JavaScript,但我正在尋找更輕量級的解決方案。如何從JSF網站上抓取Ajax生成的內容?

所以,我現在面臨的問題是:我想檢索一個特定頁面的結果,這是由某個按鈕點擊ajax調用生成的。 這個調用本身很簡單,只是一個HTTP Post到一個特定的URL,在郵件正文中提交了一些參數。我現在的問題是服務器抱怨,當我提交HTTP POST到ajax函數而沒有真正打開包含網站。

我基本上爲測試做的是:

curl -v -d "AJAXREQUEST=..." https://myhost/ajaxurl 

的是我得到的是:

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta name="Ajax-Response" content="true" /> 
     <meta name="Ajax-Expired" content="View state could't be restored - reload page ?" /> 
    </head> 
    </html> 

服務器運行的是JSF 1.2。我需要做些什麼才能從AJAX調用中獲得結果?我不是JSF的專家......

回答

0

如果我不得不猜測,JSF沒有與使用curl發送的請求相關聯的會話,因此與頁面關聯的對象不存在。捲曲看看http://curl.haxx.se/docs/httpscripting.html第10節,餅乾。你將不得不拉動頁面,獲取cookie然後用cookies來做http post(開始用curl工作很多)。

但是我會建議看一下Selenium,它有一個IDE,用於生成Java以與JavaScript進行交互。

+0

據我所知你需要一個瀏覽器來使用Selenium,對吧?我想要更輕量級的東西(例如,可以完全用java或javascript實現的東西),而不需要額外的軟件/進程。 – Julian 2012-01-31 16:49:34

+0

捲曲的方式是:'curl -c cookies myajaxurl',然後是'curl -b cookies -d「AJAXREQUEST = ...」myajaxurl' – Julian 2012-03-02 19:55:56