2013-10-04 140 views
0

我是casperjs的新手,我遇到了evaluate()函數的問題。casperJS評估和jQuery方法

的HTML代碼(我現在不能更改)

<table> 
    <tr> 
    <td>Price</td> 
    <td>some other field</td> 
    <td>blah</td> 
    <td>foo</td> 
    </tr> 
    <tr> 
    <td>125.3</td> 
    <td>some other value</td> 
    <td>something else</td> 
</table> 

的目標是開始從這些表刮信息,得到了第一個TD的每一行,後來做與他們的東西。我遇到的問題是「每個」功能沒有做任何事情。

我試過它也只是返回tr到一個變量,做一個$ .each()就可以了,但它也不起作用。每個()在評估中都不可用嗎? (我是在評估你有大部分的jQuery方法的印象)

var evaluatedItems = this.evaluate(function() { 
     var items = [];   
     $("td").filter(function() { return $.text([this]) == 'Price'; }).closest('table').find('tr').each(function() { 
      var col = $(this).find('td:first'); 
      require('utils').dump(col); 
      items.push(col); 
     }); 
     return items; 
    }); 
+0

如果jQuery是的DOM上下文中加載這隻作品。 – mike

+0

我該怎麼做?謝謝。 (如果你發佈了答案,我可以將其標記爲已回答)編輯:我在他們的網站上發現了這個:casper.page.injectJs('/ path/to/jquery.js');這是你的建議嗎? – matt

+0

我試過了,它仍然沒有工作....有沒有人有任何建議,使用我的功能(this.evaluate(function(){... – matt

回答

0

閱讀的評論後,我意識到,我在做什麼在jQuery庫的URL是把這是不允許的。

一旦我把實際的目錄位置,它的工作。把它放在casper的實例中比較容易。

var casper = require("casper").create({ 
    verbose: true, 
    logLevel: 'error',  
    clientScripts: ["<location of directory containing jquery>/jquery-1.7.2.min.js"] 
}); 

但另一種選擇是使用:

page.casperInsertJs("<location of directory containing jquery>/jquery-1.7.2.min.js");