2012-10-19 40 views
10

Tôi có một tập lệnh phantomJS được thực hiện thông qua lệnh gọi exec() trong tập lệnh node.js. Bây giờ tôi cần trả về một chuỗi từ tập lệnh PhantomJS để nó có thể được sử dụng lại trong nút.
Có cách nào để đạt được điều đó không?Truyền giá trị từ PhantomJS đến node.js

ứng dụng Node:

child = exec('./phantomjs dumper.js', 
    function (error, stdout, stderr) { 
     console.log(stdout, stderr);  // Always empty 
    }); 

dumper.js (Phantom)

var system = require('system'); 
var page = require('webpage').create(); 
page.open(system.args[1], function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access the network!'); 
    } else { 

     return "String"; // Doesn't work 
    } 
    phantom.exit('String2'); //Doesn't work either 
}); 

Trả lời

10

Ừ chỉ ra một chuỗi JSON từ PhantomJS sử dụng JSON.stringify(result) và phân tích nó trong Node.js với JSON.parse(stdout) .

Như thế này ví dụ:

Node.js:

child = exec('./phantomjs dumper.js', 
    function (error, stdout, stderr) { 
     console.log(stdout, stderr);  // Always empty 
     var result = JSON.parse(stdout); 
    } 
); 

PhantomJS:

var system = require('system'); 
var page = require('webpage').create(); 
page.open(system.args[1], function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access the network!'); 
    } else { 

     console.log(JSON.stringify({string:"This is a string", more: []})); 
    } 
    phantom.exit(); 
}); 

Here is some boilerplate về cách sử dụng PhantomJS để cạo.

+0

Cảm ơn, mặc dù tôi nên đặt lệnh gọi JSON.stringify ('kết quả') ở đâu? sau khi một statment trả về hoặc như tham số của phương thức exit (Chỉ cần thử cả hai và dường như không làm việc cho tôi) – silkAdmin

+0

Bạn thực sự không cần sử dụng JSON nếu bạn chỉ muốn truyền một chuỗi. Tôi khuyên bạn nên sử dụng JSON vì bạn có thể muốn làm nhiều hơn nữa. Nếu bạn đang sử dụng PhantomJS để xóa dữ liệu, bạn có thể muốn chia sẻ nhiều nội dung. – 3on

+0

ok cảm ơn một lần nữa, mà thực sự hoạt động, những gì nhầm lẫn tôi là comming hình thức bên trình duyệt, tôi dự kiến ​​console.log để chỉ có một cách để đổ dữ liệu thông tin chứ không phải là một cách để thực sự trở lại công cụ .. – silkAdmin

0

Cách đơn giản hơn nhiều (nếu bạn có tùy chọn) là sử dụng mô-đun NPM phantom thay vì phantomjs. Điều này cho phép bạn truy cập trực tiếp vào trình duyệt trong nodej thay vì duy trì các tập lệnh riêng biệt.

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