2012-11-15 13 views
7

Diciamo che ho una matrice di URL. Non voglio usare la funzione Then Open. Poiché attende che venga caricato ogni URL precedente e diminuisce il tempo di caricamento.Richieste simultanee CasperJS

casper.each(hrefs,function(self,href){ 
     self.thenOpen(href,function(){ }); 
     self.then(function(){ 
     // Selectors 
    }); 

});

Quali metodi utilizzeresti per spendere molto meno rispetto al metodo precedente? Sarebbe efficace creare più istanze di archiviazione nel db e quindi recuperare ... ma questo è un sacco di mal di testa. E vorrebbe anche che tu risponda in generale, avrei problemi se eseguo più istanze dello stesso file js contemporaneamente?

risposta

9

Se non ti interessa sincronizzare il comportamento tra tutti gli URL che stai aprendo, devi avviare più istanze di casper per ogni URL. Ecco un esempio:

var casperActions = { 
    href1: function (casper) { 
    casper.start(address, function() {...}); 
    // tests and what not for href1 
    casper.run(function() {...}); 
    }, 
    href2: function (casper) { 
    casper.start(address, function() {...}); 
    // tests and what not for href2 
    casper.run(function() {...}); 
    }, 
    ... 
}; 

['href1', 'href2', ...].each(function(href) { 
    var casper1 = require('casper').create(); 
    casperActions[href](casper); 
}); 

Ogni istanza verrebbe eseguito in modo indipendente l'uno dall'altro, ma permetterebbe di colpire molti URL contemporaneamente.

+0

non ho ricevuto il codice per lavorare. L'errore seguente si verifica: ** [TypeError: 'undefined' non è una funzione (valutando '[' href1 ',' href2 ']. Each')] ** Hai un'idea del perché non è definita? Grazie in anticipo! – Hammerfaust

+0

usa '['href1', 'href2']. ForEach' invece di' ['href1', 'href2']. Each' –

Problemi correlati