2013-10-04 2 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()를 수행했지만 또한 작동하지 않았다. 각()을 평가할 수 없게 만들었습니까? 코멘트를 읽은 후

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와 방법의 대부분을 가지고 평가하는 인상이었다), 나는 jQuery 라이브러리의 URL에 넣고 있었어요 무엇을하고 있었는지 허용되지 않은 것을 깨달았 .

일단 실제 디렉토리 위치에 넣으면 작동했습니다. 캐스퍼의 인스턴스화에 넣는 것이 더 쉬웠습니다.

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");