2014-11-24 1 views
1
에서 getElementInfo 객체

나는 casperjs를 사용하고 그리고 내가 객체과 같이이 점에 도착 :쿼리 CasperJS

var domElem = this.getElementInfo(".foo"); 

그리고 지금은 더에 domElem를 조회과 같이 할 :

var domElemChild = domElem.QUERYFUNCTIONHERE(".bar"); 

domElem이 DOM 노드가 아닌 객체이기 때문에 할 수 없습니다. casperjs 만 ​​사용하면 어떻게 할 수 있습니까?

참고 : 나는 안녕을 사용하여 시도하지만 그것을 필요로하는 것을 시도에 다음과 같은 오류가 출력 :

Error: Cannot find module 'util'
D:/dev/myproj/phantomjs:/bootstrap.js:289
D:/dev/myproj/phantomjs:/bootstrap.js:254 in require
D:/dev/myproj/node_modules/cheerio/node_modules/htmlparser2/lib/Pars er.js:120
D:/dev/myproj/node_modules/cheerio/node_modules/htmlparser2/lib/Pars er.js:351 Unsafe JavaScript attempt to access frame with URL about:blank from frame with U RL file:///d:/casperjs/bin/bootstrap.js. Domains, protocols and ports must match

답변

2

당신이 domElem 수행 할 작업에 따라 많은 가능성이 있습니다.

가장 쉬운은 CSS 선택기 연결하는 수 있습니다 : CSS의 경로가 문서에 따라 예기치 않은 결과를 반환 할 수 있기 때문에

var domElemChild = this.getElementInfo(".foo .bar"); 

을 다음 XPath는 의도 한대로 작동합니다 :

var domElemChild = this.getElementInfo(x("(//*[contains(@class,'foo')])[1]//*[contains(@class,'bar')]")); 

모든 것 else는 페이지 컨텍스트에서 수행되어야합니다. 그래서 당신은 clientutils module를 사용하여 수행 할 수 있습니다 유사한

var text = this.evaluate(function(){ 
    var domElem = document.querySelector(".foo"); 
    window._someDomElement = domElem; // save for later 
    // DOM nodes cannot be passed out of the page context, so return the innerHTML 
    return domElem.innerHTML; 
}); 
// do something with `text` 
var text = this.evaluate(function(){ 
    var domElemChild = window._someDomElement.querySelector(".bar"); 
    return domElemChild.innerHTML; 
}); 

뭔가처럼 뭔가를 할 수 있지만,이 모듈 만 페이지 문맥의 내부에 사용될 수 있다는 것을 잊지 마세요.