2015-01-04 2 views
2

У меня проблема: мне нужно выполнить скрипт phantomjs в java-программе, но я не могу. это код сценария:Выполнение скрипта phantomjs в java-программе

var page = require('webpage').create(); 
page.open('http://stackoverflow.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-подобной ОС? Установили ли вы PhantomJS и скрипт в/usr/bin? –

+2

Вывод скрипта phantomjs потенциально длинный - дольше, чем размер буфера Java BufferedReader. Таким образом, вы попадаете в ловушку, которую блокирует ваш скрипт phantomjs, потому что вы не читаете его вывод, а буфер заполнен. Проверьте это для деталей: http://stackoverflow.com/questions/5483830/process-waitfor-never-returns – Miichi

+0

yes Я под UNIX-системой (Ubuntu), phantomjs установлен, и скрипт находится в том же каталоге. –

ответ

0

Вы можете использовать класс выполнения для выполнения терминальных команд. Мне удалось создать желаемый результат, используя нижеприведенную программу.

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(); 
    } 
Смежные вопросы