2015-03-22 4 views
-1

Есть ли какая-либо библиотека для java для синтаксического анализа отдельных веб-сайтов, например, созданных с помощью AngularJs?Разбор одностраничного веб-приложения

Как видно из официальных документов jsoup, это не работает с js.

Решение не должно использовать установленный браузер.

+2

Попробуйте [HtmlUnit] (http://htmlunit.sourceforge.net), который h как поддержка JS. – JonasCz

ответ

1

Как уже упоминалось @JonasCz, попробуйте использовать HtmlUnit

кодекс мог бы выглядеть следующим образом:

import com.gargoylesoftware.htmlunit.BrowserVersion; 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 

public class Test { 
    public static void main(String[] args) { 
     final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24); 
     HtmlPage page = null; 
     try { 
      page = webClient.getPage("https://docs.angularjs.org/api/ng/service/$http"); 
     } catch (Exception e) {} 

     System.out.println(page.asXml()); 
     webClient.closeAllWindows(); 
    } 
} 
0

Посмотрите на следующую ссылку, это может решить вашу проблему.

try jsoup + manual parsing

+0

Спасибо, но мне нужно выполнить js (js может резко изменить html-код). – arccosinus

3

Вот правильный код для загрузки страницы с помощью AngularJS с HtmlUnit

final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24); 

webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
webClient.setCssErrorHandler(new SilentCssErrorHandler()); 

webClient.getOptions().setCssEnabled(true); 
webClient.getOptions().setRedirectEnabled(true); 
webClient.getOptions().setAppletEnabled(false); 
webClient.getOptions().setJavaScriptEnabled(true); 
webClient.getOptions().setPopupBlockerEnabled(true); 
webClient.getOptions().setTimeout(10000); 
webClient.getOptions().setThrowExceptionOnFailingStatusCode(true); 
webClient.getOptions().setThrowExceptionOnScriptError(true); 
webClient.getOptions().setPrintContentOnFailingStatusCode(true); 
webClient.waitForBackgroundJavaScript(5000); 

try { 
    HtmlPage page = webClient.getPage(URL); 
    System.out.println(page.asText()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
webClient.closeAllWindows(); 
Смежные вопросы