2012-09-23 8 views
7

Sto provando a navigare verso gli URL creati dallo script stesso.Casperjs non può aprire gli URL in modo dinamico?

Questo codice di esempio non funziona come (mi aspettavo). Non riesco a capire perché :(

var casper = require('casper').create({ 
    viewportSize:{ 
     width:1024, height:768 
    }, 
    pageSettings:{ 
     userAgent:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11' 
    }, 
    verbose:true 
}); 

casper.on('open', function (location) { 
    console.log(location + ' loaded'); 
}); 

casper.start('http://www.google.com', function() { 
    this.test.assertTitle('Google', 'Google homepage title is the one expected'); 
}); 

casper.mytest = ''; 

casper.then(function() { 
    casper.mytest = 'http://www.yahoo.com'; 
}); 

casper.thenOpen(casper.mytest, function() { 
    this.test.assertTitle('Yahoo', 'Yahoo homepage title is the one expected'); 
}); 

casper.run(function() { 
     casper.exit(); 
    } 
); 

Il risultato è che la seconda pagina non viene caricato:

http://www.google.com loaded 
PASS Google homepage title is the one expected 
loaded  
FAIL Yahoo homepage title is the one expected 
# type: assertTitle 
# subject: "" 
# expected: "Yahoo" 

risposta

10

credo, il motivo per il vostro problema è che in questo momento, al momento della registrazione thenOpen passo per Yahoo la variabile casper.mytest è vuoto. questo valore entra nella mappa del CasperJS di passi in questo momento, e non importa che si modifica la variabile di origine nella fase precedente.

il post sul blog Webscraping with CasperJS and PhantomJS può essere utile un s un esempio di recupero di URL costruiti dinamicamente.

+1

Grazie! Infatti, se uso this.open() dentro then() {}, funziona. E 'molto sconvolgente anche se, dal momento che temo che probabilmente porterà a un codice molto brutto mentre il mio progetto si ridimensiona :( – johnjohn

+0

@johnjohn, qualche tempo fa ho creato una patch (non una piccola cosa però) di CasperJS, che lo ha reso funzionante in modo passo-passo (ad-hoc). Probabilmente potresti fare lo stesso come appropriato per le tue esigenze.Il problema con la mia versione è che è stato qualche tempo fa, ed è ormai obsoleto, e non ho intenzione di port questo all'ultimo CasperJS. – Stan

Problemi correlati