2012-11-09 5 views
6

Im Verlauf der Ausführung eines CasperJS-Skripts muss ich JSON-Daten von einer anderen Site abrufen und analysieren, damit ich diese Daten zum Ausfüllen eines Formulars auf der Website verwenden kann aktiv arbeiten.Abrufen von Remote-Daten für eine Seite mit AJAX in CasperJS

Wie kann ich das tun?

+0

mit xmlhttprequest? – NiKo

+0

So würde ich es machen, wenn ich jQuery benutze. Ich kenne den optimalen Weg, dies mit CasperJS zu tun. Beachten Sie, dass dies eine Cross-Domain-Anfrage ist, von der ich nicht erwarte, dass sie innerhalb von Casper ein Problem darstellt. – eComEvo

Antwort

8

können Sie __utils__.sendAJAX() verwenden:

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

Beispielausführung (vergessen Sie nicht --web-security=no passieren):

$ 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= 

Hoffe, es hilft.

+0

Perfekt! Vielen Dank! :) – eComEvo

+0

@NiKo was, wenn ich die HTTP-Header für die Ajax-Anfrage bearbeiten möchte? Ich habe gesehen, dass es eine [Diskussion] (https://groups.google.com/forum/#!msg/phantomjs/z9WVs0SwiwM/eHifuw5RJNIJ) über das Hinzufügen in phantomjs gab, aber ich bin mir nicht sicher, ob es irgendwo hingekommen ist. – abbood

+0

@NiKo Ich denke, es ist [noch] nicht möglich (https://github.com/ariya/phantomjs/issues/10745) – abbood