Ich benutze jQuery Selektoren für casper.js scraping. Ich verstehe, dass es notwendig ist, place the jQuery calls inside casper.evaluate()
.CasperJS findet jQuery nicht
Das Problem ist, dass in der letzte dieser drei Funktionen, eine ReferenceError: Can't find variable: $
angehoben wird. Die ersten beiden funktionieren absolut gut.
// On main page, scrape links to sub-pages.
function getLinks() {
var links = $('li.ds-artifact-item a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href');
});
}
// On main page, scrape sub-pages' titles.
function getTitles() {
var titles = $('li.ds-artifact-item a');
return Array.prototype.map.call(titles, function(e) {
return e.innerHTML;
});
}
// On sub-page, scrape document description.
function getDescription(){
var descriptions = $('td.label-cell:contains(date)');
return Array.prototype.map.call(descriptions, function(e) {
return e.innerHTML;
});
}
Hier ist der Rest des Skripts, mit den unwichtigen Details verdeckt. Beachten Sie, dass anotherValidPage
eine gültige URL ist, die HTTP 200 (Erfolg) zurückgibt.
var links = []; var titles = []; var descriptions = [];
casper.start(validPage, function() {
links = this.evaluate(getLinks);
titles = this.evaluate(getTitles);
});
casper.then(function() {
// echo results
this.echo(links.length + ' links found:');
this.echo(' - ' + links.join('\n - '));
this.echo(titles.length + ' titles found:');
this.echo(' - ' + titles.join('\n - '));
});
casper.thenOpen(anotherValidPage, function(){});
casper.then(function(){
// This call is the problematic one.
descriptions = this.evaluate(getDescription());
this.echo(descriptions.length + ' descriptions found:');
this.echo(' - ' + descriptions.join('\n - '));
});
casper.run();