如何使用casperjs click()标记而不是锚点

时间:2014-08-13 06:52:40

标签: javascript web-crawler casperjs

目标html就像

<script src="http://static.com/js/qiyi/config.js" type="text/javascript">
<dl class="selected">
   <dt>
       <span data-value="2014">2014年</span>
   </dt>
</dl>
<dl>
   <dt>
      <span data-value="2013">2013年</span>
   </dt>
</dl>

不是一个简单的锚标签,所以在我的浏览器中,当我点击span标签时,它会调用config.js做某事(我不知道它做了什么),它会改变内容。但是当我使用

this.click()

模拟鼠标操作,它不起作用。 因为我知道casperjs可以像浏览器一样工作。 如果我想抓取不同年份的内容,我该怎么办

我的代码是

var casper = require("casper").create({
    clientScripts: [
        "jquery-1.7.2.js",
        "config.js"],  //in url page call this js
    remoteScripts: ["http://static.qiyi.com/js/qiyi/config.js"],//also the config.js

    stepTimeout: 120 * 1000,  //单步超时时间
    pageSettings: {  
        loadImages: false  
    },  
    verbose: true,  
    logLevel: "error"  
});   

var fs = require('fs');
var filename = 'content.txt';

casper.on('resource.received', function(resource) {
    casper.echo(resource.url);
});

casper.on('click', function(resource) {
    casper.echo("click");
});

casper.on("page.error", function(msg, trace) {
    this.echo("Error: " + msg, "ERROR");
});

casper.on("resource.error", function(resourceError {
    console.log(JSON.stringify(resourceError));});

casper.start("http://www......");
casper.then(function() {
    this.evaluate(function(){
        document.querySelectorAll('[data-value="2013"]')[0].click();
        //it does not work
    });
    this.echo("click");
});
casper.then(function() {
    this.click('span[data-value="2013"]');
    //it does not work
    fs.write(filename, this.getHTML(), 'w');
    this.echo("click");
});

casper.run();

3 个答案:

答案 0 :(得分:1)

如果你第一次使用js,你必须确定如何调试,包括page.error和捕获事件很重要。像

casper.on("click", function(){this.echo();});
casper.on("page.error", function(){this.echo();});

事件发生你可以得到。 对于这个问题,点击后,必须有一些时间来接收资源。

this.wait(5000, function(){fs.write(...);})

谢谢@ArtjomB。

答案 1 :(得分:0)

您可能想要使用casper.evaluate

评估一些javascript(有权访问窗口对象,就像您在浏览器中一样)
casper.evaluate(function() {
  document.querySelectorAll('[data-value="2014"]')[0].click();
});

答案 2 :(得分:0)

在评估函数之外使用clickLabel函数Works代码中的span

casper.then(function(){
    this.clickLabel('2014', 'span');
});

Found here