查询CasperJS中的getElementInfo对象

我正在使用casperjs,并得到了一个我有这样一个对象的点:

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

现在我想进一步查询domElem,如下所示:

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

我不能这样做,因为domElem是一个对象,而不是一个DOM节点,我能做些什么(最好)只有casperjs?

注:我尝试使用cheerio,但它试图要求它输出以下错误:

错误:找不到模块'util'
d是:/ dev /的Myproj / phantomjs:/bootstrap.js:289
D:/ dev / myproj / phantomjs:/bootstrap.js:254中的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不安全的JavaScript尝试访问带有以下URL的帧:从U帧的空白帧:/// d:/ casperjs / bin /bootstrap.js。 域,协议和端口必须匹配

有很多可能性取决于你想用domElemdomElem

最简单的可能是连接CSSselect器:

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

由于CSSpath可能会根据您的文档返回意外结果,因此以下XPath将按预期工作:

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

其他一切必须在页面上下文中完成。 所以你可以做类似的事情

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

使用clientutils模块可以做类似的事情,但不要忘记,这个模块只能在页面上下文中使用。