J'essaie d'utiliser le serveur web pour parler au monde extérieur et setInterval veut que son exécution soit automatique de temps en temps.Comment réglerInterval correct dans casperjs?
Un de mes paramètre casperjs est this.capture(x + 'apple.png');
Je pensais qu'il affichera trois images sous mon dossier si setInterval
courir trois fois. Par conséquent, je ne sauvegarde qu'une seule image: 1apple.png
.
Bien que je peux voir un bon nombre d'informations sur mon terminal
Je veux demander quelle étape dois-je manquer? Toute aide serait appréciée. Merci d'avance.
Voici mon code today.js:
var webserver = require('webserver');
var server = webserver.create();
var service = server.listen('8080', {
'keepAlive': true
}, function (request, response) {
response.statusCode = 200;
response.write('<html><body>What the hell~~</body></html>');
var casper = require("casper").create({
verbose: true,
logLevel: 'debug', // debug, info, warning, error
pageSettings: {
loadImages: false,
loadPlugins: false,
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'
}
});
var movieTitle = [];
var movieEnTitle = [];
var title = [];
var movieTime = [];
var movieVersion = [];
var city = '台南';
var latitude = 22.993089;
var longitude = 120.196876;
var theaterName = '今日戲院';
var data = {};
data.theater = [];
data.movie = [];
var x =1;
function getMovieTitle() {
var title = document.querySelectorAll('div.theaterlist_name a');
return Array.prototype.map.call(title, function (e) {
return e.innerText;
});
};
function getEnTitle() {
var title = document.querySelectorAll('div.en a');
return Array.prototype.map.call(title, function (e) {
return e.innerText;
});
};
function getMovieTime() {
var title = document.querySelectorAll('ul.theater_time');
return Array.prototype.map.call(title, function (e) {
return e.innerText;
});
};
function getMovieVersion() {
var version = document.querySelectorAll('div.tapR');
return Array.prototype.map.call(version, function (e) {
return e.innerText;
});
};
// 台南 今日戲院 from 奇摩
casper.start('https://tw.movies.yahoo.com/theater_result.html/id=67', function() {
this.echo(this.getTitle());
});
casper.then(function() {
this.echo('Image');
this.echo(x);
this.capture(x + 'apple.png');
x++;
});
casper.then(function() {
movieTitle = this.evaluate(getMovieTitle);
movieEnTitle = this.evaluate(getEnTitle);
movieTime = this.evaluate(getMovieTime);
movieVersion = this.evaluate(getMovieVersion);
});
casper.then(function() {
console.log('Print:\n');
this.echo(movieTitle.length + ' Movie title found :\n');
this.echo(movieTitle.join('\n'));
this.echo(movieEnTitle.length + ' Movie title found :\n');
this.echo(movieEnTitle.join('\n'));
this.echo(movieTime.length + ' Movie time found :\n');
this.echo(movieTime.join('\n'));
this.echo(movieVersion.length + ' Movie version found :\n');
this.echo(movieVersion.join('\n'));
this.echo(outPutJSON());
});
function outPutJSON() {
data.theater.push({
name: theaterName,
city: city,
latitude: latitude,
longitude: longitude
});
// 將中英文名字合併
for (var i = 0; i < movieTitle.length; i++) {
title.push(movieTitle[i] + movieEnTitle[i]);
}
for (var i = 0; i < movieTime.length; i++) {
var name = title[i];
var sourceTime = movieTime[i].match(/.{1,5}/g);
var times = [];
times.push(sourceTime);
var version = movieVersion[i];
data.movie.push({
name: name,
version: version,
time: times
});
}
return JSON.stringify(data);
}
// casper.run(function() {
// // this.echo('Done').exit();
// this.echo('Done');
// });
setInterval(function() {
casper.run(function() {
// this.echo('Done').exit();
this.echo('Done');
});
}, 2000);
response.write(outPutJSON());
response.close();
});
Voici mon dossier quand je prescris ce fichier, vous pouvez voir que l'image de capture une fois 1apple.png
.
Merci pour votre réponse, je mets à jour la question de montrer ce que je veux. J'ai mis une certaine fonction après casper.start, ma question est pourquoi setInterval ne fonctionne pas encore this.capture? –
Merci pour la mise à jour, mais je ne suis toujours pas sûr de comprendre ce que votre code essaie de faire. Essayez-vous d'aller chercher une page web et de la capturer toutes les 2 secondes? Quel est le but du serveur Web enroulé autour de l'invocation de casperjs? – davejagoda
OK, 2 secondes est juste un test, vraiment ce que je veux peut-être une ou deux heures. La fonction this.capture (x + 'apple.png'); est après casper.start. Quand je parle au serveur Web j'obtiendra un png toutes les heures. Comme 1apple.png, 2apple.png, 3apple.png comme ça ... Mais dans mon code je reçois seulement 1apple.png. C'est juste comme mon dossier de projet. –