2012-12-31 46 views
2

我想通過使用PhantomJS 1.7.0使用CasperJS模擬事件從站點獲取數據。CasperJS點擊事件AJAX調用

我能夠模擬正常的點擊事件並選擇事件。但我的代碼在以下情況下失敗:

當我點擊遠程頁面上的按鈕/錨點等,點擊遠程頁面啓動AJAX調用/ JS調用(取決於程序員如何實現該頁面)。

在JS調用的情況下,我的代碼工作,我得到更改的數據。但對於啓動AJAX調用的點擊,我不會獲取更新的數據。

對於調試,我試圖獲取元素容器的頁面源代碼(之前和之後),但我看不到代碼中的更改。

我試圖設置等待時間從10秒到1毫秒的範圍,但這並不反映行爲的任何變化。

下面是我點擊的一段代碼。我正在使用一組CSS路徑,它代表要點擊的元素。

/*Click on array of clickable elements using CSS Paths.*/ 
fn_click = function(){ 
casper.each(G_TAGS,function(casper, cssPath, count1) 
        { 
          casper.then (function() { 
          casper.click(cssPath); 

          this.echo('DEBUG AFTER CLICKING -START HTML '); 
          //this.echo(this.getHTML("CONTAINER WHERE DETAILS CHANGE")); 
          this.echo('DEBUG AFTER CLICKING -START HTML'); 
          casper.wait(5000, function() 
                { 

                 casper.then(fn_getData); 
                } 
            ); 
          });  
        }); 
}; 

UPDATE:

我嘗試使用遠程調試選項從phantomJS,調試上面的腳本。 它不工作。我在窗戶上。我也會嘗試在Ubuntu上運行遠程調試。

請幫幫我。我將不勝感激任何幫助。

更新:

請看下面的代碼作爲示例。

https://gist.github.com/4441570 

點擊前和點擊後的內容相同。

我點擊標籤下的排序選項(投票/活動等)。

+0

這是否有任何更新?我有類似的問題。 –

+0

轉到GitHub鏈接。我所能想象出的是由於jQuery注入導致的錯誤。我在那裏發表了我的意見和問題,我仍在等待答覆。 –

回答

5

今天我有同樣的問題。我發現這個帖子,這使我在jQuery的方向。

經過一些測試,我發現已經有一個jQuery加載在該網頁上。 (雖然是一個漂亮的舊版本)

加載另一個jQuery,打破了任何js調用,所以也是一個Ajax調用的鏈接。

爲了解決這個問題,我發現http://api.jquery.com/jQuery.noConflict/

,並添加以下到我的代碼:這是以前分配到$

this.evaluate(function() { jq = $.noConflict(true) }); 

的東西都會被這種方式恢復。你注入的jQuery現在在'jq'下可用。

希望這可以幫助你們。

+0

不想讓我的希望過早,但這個修復似乎工作。奇怪,因爲我可以找到在Im刮頁面上的jQuery ..無論如何。謝謝! –

+0

我的意思是我找不到 –

+2

它不一定是jQuery。 $可能會引用另一個庫,並且在注入jQuery時會崩潰。使用noConflict()將恢復以前的別名。 – Leentje