Javascript 在CasperJS中查询getElementInfo对象

Javascript 在CasperJS中查询getElementInfo对象,javascript,node.js,casperjs,cheerio,Javascript,Node.js,Casperjs,Cheerio,我正在使用casperjs,我得到了这样一个对象: var domElem = this.getElementInfo(".foo"); 现在我想进一步询问domElem,如下所示: var domElemChild = domElem.QUERYFUNCTIONHERE(".bar"); 我不能这样做,因为domElem是一个对象而不是DOM节点,我只能(最好)使用casperjs做什么 注意:我尝试使用cheerio,但在尝试要求时,它输出了以下错误: 错误:找不到模块“util” D:

我正在使用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 js:351不安全的JavaScript试图使用URL访问帧 关于:从具有U RL的帧开始空白file:///d:/casperjs/bin/bootstrap.js. 域、协议和端口必须匹配


根据您想用
domElem
做什么,有很多种可能性

最简单的方法可能是连接CSS选择器:

var domElemChild = this.getElementInfo(".foo .bar");
由于CSS路径可能会根据您的文档返回意外结果,因此以下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;
});
可以使用完成类似的操作,但不要忘记,此模块只能在页面上下文中使用