【问题标题】:Query a getElementInfo object in CasperJS在 CasperJS 中查询一个 getElementInfo 对象
【发布时间】:2014-11-26 06:33:16
【问题描述】:

我正在使用 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 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 不安全的 JavaScript 尝试使用 URL 访问框架 about:blank from frame with url file:///d:/casperjs/bin/bootstrap.js。 域、协议和端口必须匹配

【问题讨论】:

    标签: javascript node.js casperjs cheerio


    【解决方案1】:

    有很多可能性取决于你想用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;
    });
    

    可以使用clientutils module 完成类似的操作,但不要忘记此模块只能在页面上下文中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      相关资源
      最近更新 更多