我正在编写一个小脚本来查询电子商务网站上的某些广告。我的代码就像这样
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。这些代码有什么问题?
答案 0 :(得分:0)
我找到了答案。我需要用casper.then()包围casper.fill()。