2012-11-09 15 views
6

Durante l'esecuzione di uno script CasperJS ho bisogno di recuperare e analizzare dati JSON da un altro sito in modo che io possa usare quei dati per compilare un modulo sul sito che sto lavorando attivamente.Ottenere dati remoti per una pagina utilizzando AJAX in CasperJS

Come posso fare questo?

+0

utilizzando xmlhttprequest? – NiKo

+0

Ecco come lo farei se usassi jQuery. Non so il modo ottimale per farlo con CasperJS. Tieni presente che si tratta di una richiesta interdominio, che non mi aspetto essere un problema all'interno di Casper. – eComEvo

risposta

8

È possibile utilizzare __utils__.sendAJAX():

var casper = require('casper').create(); 
var wsurl = 'https://raw.github.com/n1k0/casperjs/master/package.json'; 
var word; 

casper.start('http://google.com/', function() { 
    word = this.evaluate(function(wsurl) { 
     try { 
      return JSON.parse(__utils__.sendAJAX(wsurl, 'GET', null, false)).name; 
     } catch (e) { 
     } 
    }, {wsurl: wsurl}); 
}); 

casper.then(function() { 
    if (!word) { 
     this.die('unable to retrieve word'); 
    } 
    this.echo('searching for ' + word); 
    this.fill('form[action="/search"]', {q: word}, true); 
}); 

casper.run(function() { 
    this.echo(this.getCurrentUrl()); 
    this.exit(); 
}); 

esecuzione del campione (non dimenticate di passare --web-security=no):

$ casperjs test.js --web-security=no 
searching for casperjs 
http://www.google.fr/search?hl=fr&source=hp&q=casperjs&gbv=2&oq=&gs_l= 

Speranza che aiuta.

+0

Perfetto! Grazie! :) – eComEvo

+0

@NiKo cosa succede se voglio modificare le intestazioni http per la richiesta ajax? Ho visto che c'era una [discussione] (https://groups.google.com/forum/#!msg/phantomjs/z9WVs0SwiwM/eHifuw5RJNIJ) sull'aggiunta in phantomjs, ma non sono sicuro che sia arrivata ovunque ... un consiglio? – abbood

+0

@NiKo Suppongo che non sia possibile [ancora] (https://github.com/ariya/phantomjs/issues/10745) – abbood

Problemi correlati