상황 : 내 crontab에서, 나는 .sh 스크립트를 실행하는 직업이 있습니다. 이 스크립트는 차례로 내 말을 실행합니다. casperjs casper.js - 모든 것이 정상적으로 작동합니다. 스크립트는 명령 행에서 실행할 때 실행됩니다. 쉘 스크립트는 명령 행에서 호출 될 때 정상적으로 실행됩니다. 내가 crontab에서 작업을 실행하고 로그 파일에 출력, 나는 그것이 작동하는지 볼 수 있습니다.나는 casperjs 파일을 실행하는 cron 작업을 가지고있다 - 로그를 쓰면 좋지만 왜 cron이 예상 한 json을 출력하지 않는가?
그러나 기대 한 결과를 얻을 수 없습니다. 즉.
var casper = require('casper').create({
waitTimeout: 10000,
stepTimeout: 10000,
verbose: true,
//debug, write out results, errors
logLevel: "debug",
loadImages: true,
loadPlugins: true,
pageSettings: {
javascriptEnabled: true,
webSecurityEnabled: false
},
onWaitTimeout: function() {
this.echo('** Wait-TimeOut **');
},
onStepTimeout: function() {
this.echo('** Step-TimeOut **');
}
});
//vars for this page
var url = 'http://urltoscrape.com';
var results = [];
var menuResults = [];
var fs = require('fs');
var terminate = function() {
this.echo("Exiting..").exit();
};
var getContent = function() {
//grab the values that we need for json file, store in empty results array
var results = [];
var URL = document.querySelectorAll('#results .event-details-link');
var title = document.querySelectorAll('#results h3');
var date = document.querySelectorAll('#results span');
var desc = document.querySelectorAll('#results p');
for (var i = 0;
//count through URL, title, date and description
i < URL.length
&& i < title.length
&& i < date.length
&& i < desc.length;
i++) {
var innerURL = URL[i].getAttribute("href");;
var innerTitle = title[i].innerText;
var innerDate = date[i].innerText;
//messy regex, TODO: make more efficient
var newDate = innerDate.replace(/\s[at].*$/g,"");
var strip = newDate.replace(/[on]/g,"");
var nows = strip.replace(/\s/g, "");
var innerDesc = desc[i].innerText;
var dept = "Dept";
//push into json, TODO: order
results.push({ URL: innerURL, title: innerTitle, date: nows, desc: innerDesc, dept: dept});
}
return results;
}
var processPage = function() {
//crude but waits for page to load
this.wait(2000, function() {
//run the get content function
results = this.evaluate(getContent);
require('utils').dump(results);
//write to file
fs.write("casper_output.json", JSON.stringify(results, null, ' '), 'w');
});
}
casper.start(url, function() {
this.waitForSelector('#results', processPage, terminate);
});
casper.run();
을 호출하는 쉘 스크립트, casper_run.sh : casper_output.json, 여기 실행 전체 casper.js 파일에 마지막으로
#!/bin/bash
PATH=/output/of/path/MAMP/Library/bin
PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs ; /usr/local/bin/casperjs /Applications/AMPPS/www/test/casper.js 2>&1
그리고 내 crontab을은 :
* * * * * /Applications/AMPPS/www/test/casper_run.sh
그 casper_output.json 내 cron 작업에서 쓰지 않는 이유에 대한 어떤 통찰 (그러나이 때 연구를 수행 un 명령 줄에서) 너무 환영합니다. 나는 이것을 너무 오랫동안 연구 해왔다.
감사합니다.