使用CasperJS删除DOM元素

时间:2013-06-13 20:08:40

标签: javascript phantomjs casperjs

好的,基本上我有一个帖子:

<div class=post>
  <div class=content></div>
  <div class=content-meta></div>
</div>

这就是它的原型,以帮助解释

所以我想要做的是使用一些JS基本上删除或隐藏div'content-meta'

使用JQuery我有:

$('.content-meta').remove();

然而,当我使用CasperJS时,我有点困惑,因为我应该如何实现此代码。

我希望在屏幕捕获之前操作一个帖子(screencapture部分工作正常)

下面是我一直在测试的代码(URL的OMITTED),它很好地选择了类,但是我不知道在屏幕捕获之前在哪里/如何执行Jquery来删除检测到的元素:

casper.start('http://pageurl.com/XYZ', function() {

if (this.exists('.content-meta')) {
    this.echo('found .content-meta', 'INFO');
} else {
    this.echo('.content-meta not found', 'ERROR');
}
this.captureSelector('resultingcapture.png', '.post');
});

casper.run();

TL; DR如何在CasperJS函数中执行JS / Jquery?

1 个答案:

答案 0 :(得分:5)

对于来自CasperJS的执行javascript代码,您必须使用evaluate()方法

  

evaluate()方法作为CasperJS环境与您打开的页面之间的门;每当你将一个闭包传递给evaluate()时,你就像进入浏览器控制台一样进入页面并执行代码。

您的代码应该是这样的:

var casper = require('casper').create();

casper.start('http://pageurl.com/XYZ', function() {

   if (this.exists('.content-meta')) {

       this.echo('found .content-meta', 'INFO');

       //evaluates an expression in the current page DOM context.
       this.evaluate(function(){
          //delete div 'content-meta'
          $('.content-meta').remove();
       });

       this.then(function(){
           this.captureSelector('resultingcapture.png', '.post');
       });

  } else {
      this.echo('.content-meta not found', 'ERROR');
  }
});

casper.run();

注意:此代码仅在webcontext包含jQuery时才会运行,否则您只需使用javascript删除div。