在java程序中执行phantomjs脚本

问题描述:

我有一个问题:我必须在java程序中执行一个phantomjs脚本,但我不能。 这是脚本的代码:在java程序中执行phantomjs脚本

var page = require('webpage').create(); 
page.open('http://*.com',function(status){ 
if(status !== 'success'){ 
    console.log('Open failed'); 
}else{ 
    console.log(page.evaluate(function(){ 
     return document.documentElement.outerHTML; 
    })); 
} 
phantom.exit(); 
}); 

在实践中,我想执行一个网页的JavaScript和之后采取的HTML结果。 我试着用这个链接Running Phantomjs from javascript, JSP or Java的代码,但我的程序被阻止在该行

int exitStatus = process.waitFor(); 

我能做些什么来解决这个?

谢谢

+0

您是否在类Unix操作系统下运行?你是否在/ usr/bin下安装了PhantomJS和脚本? – 2015-01-04 10:58:03

+2

您的phantomjs脚本的输出可能比Java的BufferedReader的缓冲区大小要长。因此,您可能会陷入您的phantomjs脚本阻止的陷阱,因为您没有读取其输出并且缓冲区已满。检查这个细节:http://*.com/questions/5483830/process-waitfor-never-returns – Miichi 2015-01-04 11:11:48

+0

是的我在unix系统(Ubuntu),phantomjs安装和脚本是在同一目录。 – 2015-01-04 13:35:37

您可以使用运行时类来执行终端命令。我能够使用下面的程序生成我想要的输出。

Runtime rt = Runtime.getRuntime(); 
    try{ 
     Process pr = rt.exec("pathToPhantomHome/phantomjs "+ " pathToJSfile"); 
     BufferedInputStream bis = new BufferedInputStream(pr.getInputStream()); 
     bis.close(); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    }