2012-11-09 40 views
6

Trong quá trình thực thi kịch bản CasperJS, tôi cần lấy và phân tích cú pháp dữ liệu JSON từ một trang khác để tôi có thể sử dụng dữ liệu đó để điền vào biểu mẫu trên trang web tích cực làm việc trên.Lấy dữ liệu từ xa cho một trang sử dụng AJAX trong CasperJS

Tôi làm cách nào để thực hiện việc này?

+0

bằng cách sử dụng xmlhttprequest? – NiKo

+0

Đó là cách tôi sẽ làm điều đó nếu tôi đang sử dụng jQuery. Không biết cách tối ưu để làm điều này với CasperJS. Hãy ghi nhớ đây là một yêu cầu miền chéo, mà tôi không mong đợi là một vấn đề trong casper. – eComEvo

Trả lời

8

Bạn có thể sử dụng __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(); 
}); 

mẫu thực hiện (đừng quên để vượt qua --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= 

Hy vọng nó giúp.

+0

Hoàn hảo! Cảm ơn! :) – eComEvo

+0

@NiKo nếu tôi muốn chỉnh sửa tiêu đề http cho yêu cầu ajax thì sao? Tôi thấy có một [thảo luận] (https://groups.google.com/forum/#!msg/phantomjs/z9WVs0SwiwM/eHifuw5RJNIJ) về việc thêm nó vào trong các ảo ảnh nhưng tôi không chắc liệu nó có ở đâu không. Lời khuyên? – abbood

+0

@NiKo Tôi đoán là không thể [chưa] (https://github.com/ariya/phantomjs/issues/10745) – abbood

Các vấn đề liên quan