CasperJS đang được PHP gọi bằng lệnh exec()
. Sau khi CasperJS thực hiện công việc của mình như truy xuất các phần của trang web, làm thế nào dữ liệu được truy xuất có thể được trả lại cho PHP?CasperJS truyền dữ liệu trở lại PHP
9
A
Trả lời
8
Bạn có thể chuyển hướng đầu ra từ stdout tới một mảng.
On this trang nó nói rằng bạn có thể làm:
string exec (string $command [, array &$output [, int &$return_var ]])
Nó tiếp tục nói:
Nếu đối số đầu ra là hiện nay, sau đó các mảng được chỉ định sẽ được lấp đầy với tất cả các dòng đầu ra từ lệnh.
Về cơ bản, bạn có thể thực hiện lệnh exec ('lệnh casperjs tại đây, $ array_here);
24
Tôi nghĩ cách tốt nhất để chuyển dữ liệu từ CasperJS sang ngôn ngữ khác như PHP đang chạy tập lệnh CasperJS làm dịch vụ. Bởi vì CasperJS đã được viết trên PhantomJS, CasperJS có thể sử dụng một mô-đun máy chủ web nhúng của PhantomJS gọi là Mongoose.
Để biết thông tin về cách thức hoạt động của máy chủ web nhúng here
Dưới đây là một ví dụ về cách một kịch bản CasperJS có thể bắt đầu một máy chủ web xem.
//define ip and port to web service
var ip_server = '127.0.0.1:8585';
//includes web server modules
var server = require('webserver').create();
//start web server
var service = server.listen(ip_server, function(request, response) {
var links = [];
var casper = require('casper').create();
function getLinks() {
var links = document.querySelectorAll('h3.r a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href')
});
}
casper.start('http://google.fr/', function() {
// search for 'casperjs' from google form
this.fill('form[action="/search"]', { q: 'casperjs' }, true);
});
casper.then(function() {
// aggregate results for the 'casperjs' search
links = this.evaluate(getLinks);
// now search for 'phantomjs' by filling the form again
this.fill('form[action="/search"]', { q: 'phantomjs' }, true);
});
casper.then(function() {
// aggregate results for the 'phantomjs' search
links = links.concat(this.evaluate(getLinks));
});
//
casper.run(function() {
response.statusCode = 200;
//sends results as JSON object
response.write(JSON.stringify(links, null, null));
response.close();
});
});
console.log('Server running at http://' + ip_server+'/');
Các vấn đề liên quan
- 1. Truyền dữ liệu trở lại với bỏ quaViewControllerAnimated
- 2. Ajax PHP Jquery - ghi lại dữ liệu trở lại
- 3. NSURLConnection đang trở lại dữ liệu cũ
- 4. Truyền dữ liệu USB
- 5. C# truyền trở lại loại var?
- 6. Truyền dữ liệu từ lớp PHP sang PHPExcel qua AJAX
- 7. Khôi phục bảng MySQL trở lại cơ sở dữ liệu
- 8. chuyển đổi dữ liệu trở lại vào một chuỗi
- 9. trở lại dữ liệu khai báo trong hàm
- 10. Cách chuyển dữ liệu trở lại cửa sổ chính?
- 11. PHP và C++ có thể truyền dữ liệu giữa nhau không?
- 12. Postgres chức năng quay trở lại bảng không trả lại dữ liệu trong các cột
- 13. Android - Cách gửi dữ liệu trở lại hoạt động gọi điện
- 14. Truyền dữ liệu bổ sung cho EditorTemplate
- 15. thuộc tính dữ liệu trở thành nguyên
- 16. Truyền dữ liệu POST từ trang này sang trang khác bằng PHP
- 17. Drop cơ sở dữ liệu trở lại "Lỗi thả cơ sở dữ liệu errno: 66" trong MySQL
- 18. Rails: truyền dữ liệu để javascript
- 19. MVC - Truyền dữ liệu với RedirectToAction()
- 20. Truyền dữ liệu bằng Python và Flask
- 21. Jquery truyền dữ liệu đến hàm ajax
- 22. Truyền dữ liệu âm thanh trong HTML5
- 23. Truyền dữ liệu AVCaptureAudioDataOutput vào vDSP/Accelerate.framework
- 24. Truyền dữ liệu từ Bộ điều khiển MVC sang Chế độ xem trong PHP
- 25. PHP đèo dữ liệu với Redirect
- 26. làm cách nào để gửi dữ liệu trở lại từ onPostExecute trong AsyncTask?
- 27. Tại sao dữ liệu dịch vụ web trở lại như msg.d
- 28. Làm thế nào để bạn liên kết ggplot2 grobs trở lại dữ liệu?
- 29. Vận chuyển trở lại \ Cấp nguồn cấp dữ liệu trong Java
- 30. Cách chuyển dữ liệu từ chế độ xem web trở lại ứng dụng Android gốc
Trong khi tôi đồng ý rằng đây là một kỹ thuật tốt về lý thuyết, trong thực tế casper không giải phóng tài nguyên ảo, dường như sử dụng bộ nhớ tăng dần theo tuyến tính với mỗi yêu cầu. Tôi đã thử thêm '' 'casper.clear()' '' và thậm chí hacking clear() vào '' 'gọi this.page.close()' '' (từ trong trang clear()). Trong khi gọi gần xuất hiện để giúp nó không giải quyết được vấn đề. – danmux