我有一个casper脚本提交表单并擦除响应。
我试图建立一个“按需抓取”环境,我可以使用PhatomJS网络服务器将表单值发布到网址,然后在我的Casper脚本中使用该数据来抓取页面,然后在网页上打印出响应。我不知道如何将post变量传递给casper,然后将响应传递给Phantom。
继承我的基本Phantom / Casper结构:
var server = require('webserver').create();
server.listen(8080, function(request, response) {
phantom.casperPath = '/source/casper/casperjs';
phantom.injectJs('/source/casper/casperjs/bin/bootstrap.js');
var address = request.post.address;
var casper = require('casper').create();
casper.start();
casper.then(function(){
address = // want to access global address here
result = begin(this, address); //Contians Casper scrape code
});
casper.run(function(){
this.exit();
});
response.statusCode = 200;
response.write(result); // from casper
response.close();
});
有没有办法从casper中的幻像访问变量,然后在我完成抓取后将数据传回?
答案 0 :(得分:4)
除非你在PhantomJS中做了一些无法在CasperJS中完成的事情,否则你可能最好在CasperJS中启动服务器并在那里响应你的Casper函数的结果。
基于:https://stackoverflow.com/a/16489950/1096083
//includes web server modules
var server = require('webserver').create();
//start web server
var service = server.listen(ip_server, function(request, response) {
var results;
var address = request.post.address; // this is not working the way you would expect, needs a little help
var casper = require('casper').create();
casper.start(address, function() {
// do some stuff with casper
// store it in results
});
casper.then(function() {
// do some more stuff with casper
// store that in results too
});
casper.run(function() {
response.statusCode = 200;
response.write(results);
response.close();
});
});
console.log('Server running at http://localhost:' + ip_server+'/');