如何在CasperJS中正确使用casper.each

时间:2013-07-11 12:30:42

标签: javascript casperjs

我正在编写一个小脚本来查询电子商务网站上的某些广告。我的代码就像这样

    var keywords = ['fender', 'yamaha'];
    var casper = require('casper').create(),
        url = 'http://www.somecommercesite.com';

    casper.start(url, function () {
        casper.each(keywords, function (self, word) {
            casper.echo("Getting entries for keyword " + word + "..");

            casper.fill('form#frmsearch', {
                'q': word
            }, true);

            casper.then(function () {
                casper.echo("KEYWORD SHOULD BE: " + word);

                var actualKeyword = casper.evaluate(function() {
                    return "ACTUAL KEYWORD: " + document.getElementsByTagName('strong')[0].innerText;
                });
                casper.echo(actualKeyword);

                var result = casper.evaluate(function () {
                    var entry = document.getElementsByClassName("listing")[0];
                    return entry.innerText;
                });
                casper.echo(result);
            });
        });
    });

    casper.run();

但是,我的结果不正确。输出是

Getting entries for keyword fender..    
Getting entries for keyword yamaha..    
KEYWORD SHOULD BE: fender    
ACTUAL KEYWORD: fender    
// entries for fender

KEYWORD SHOULD BE: yamaha   
ACTUAL KEYWORD: fender    
// entries for fender

所以,我两次获得挡泥板条目,从未得到过yamahas。这些代码有什么问题?

1 个答案:

答案 0 :(得分:0)

我找到了答案。我需要用casper.then()包围casper.fill()。