2012-09-23 7 views
7

Estoy intentando navegar a las URL que se crean a partir del script.Casperjs no puede abrir urls dinámicamente?

Este código de ejemplo no funciona como (esperaba). No se puede entender por qué :(

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(); 
    } 
); 

El resultado es que la segunda página no se carga:

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" 

Respuesta

10

creo, la razón de su problema es que en este momento, cuando se registra thenOpen paso para Yahoo la variable casper.mytest está vacía. este valor se mete en mapa de los pasos del CasperJS en este momento, y no importa que cambie la variable de origen en el paso anterior.

la entrada de blog Webscraping with CasperJS and PhantomJS puede ser útil un s un ejemplo de ir a urls construidas dinámicamente.

+1

¡Gracias! De hecho, si uso this.open() dentro de then() {}, funciona. Sin embargo, es muy inquietante, ya que me temo que probablemente dará lugar a un código muy feo a medida que mi proyecto se amplíe :( – johnjohn

+0

@johnjohn, hace un tiempo hice un parche (no por pequeño) de CasperJS, que lo hizo funcionar en forma paso a paso (ad-hoc). Probablemente pueda hacer lo mismo que sea apropiado para sus necesidades. El problema con mi versión es que fue hace algún tiempo, y ahora está desactualizada, y no planeo hacer el puerto esto al último CasperJS. – Stan

Cuestiones relacionadas