2013-10-19 2 views
1

자바 스크립트를 사용하여 표를 만드는 웹 페이지가 있습니다. 지금 자바 프로젝트에서 JSoup을 사용하여 웹 페이지를 파싱합니다. 그런데 JSoup은 자바 스크립트를 실행할 수 없으므로 테이블이 생성되지 않고 웹 페이지의 소스가 불완전합니다. JSoup을 사용하여 콘텐츠를 구문 분석하기 위해 해당 스크립트로 만든 HTML 코드를 어떻게 포함시킬 수 있습니까? 간단한 예제를 제공 할 수 있습니까? 고맙습니다!자바 스크립트가 포함 된 웹 페이지를 구문 분석하는 방법은 무엇입니까?

웹 페이지 예 :

<!doctype html> 
<html> 
    <head> 
    <title>A blank HTML5 page</title> 
    <meta charset="utf-8" /> 
    </head> 
    <body> 
    <script> 
     var table = document.createElement("table"); 
     var tr = document.createElement("tr"); 
     table.appendChild(tr); 
     document.body.appendChild(table); 
    </script> 
    <p>First paragraph</p> 
    </body> 
</html> 

출력 같아야는 자바 스크립트를 실행할 수 없다로 그런데

<!DOCTYPE html> 
<html> 
    <head> 
     <title> 
      A blank HTML5 page 
     </title> 
     <meta charset="utf-8"></meta> 
    </head> 
    <body> 
     <script> 
      var table = document.createElement("table"); 
      var tr = document.createElement("tr"); 
      table.appendChild(tr); 
      document.body.appendChild(table); 
     </script> 
     <table> 
      <tr></tr> 
     </table> 
     <p> 
      First paragraph 
     </p> 
    </body> 
</html> 

가 JSoup 테이블 태그를 포함하지 않는다. 이것을 어떻게 할 수 있습니까?

+0

Javascript가 테이블을 채우는 데 사용하는 AJAX 서비스와의 인터페이스를 시도하는 것이 좋습니다. – chrylis

+0

@chrylis 내가 생각하는 AJAX 서비스가 있습니다! – Angelo

+0

@ClaudioSantos 그 질문 에서처럼 스크립트에서 값을 가져 오는 방법을 묻는 것은 중복되지 않습니다. 그 스크립트의 HTML 출력을 파싱하고 싶습니다. – Angelo

답변

3

첫 번째 가능성

당신은 "진짜"브라우저를 사용하는 즉 Jsoup, 외부 몇 가지 옵션을 가지고 있고 그것과 상호 작용합니다. 이것에 대한 탁월한 선택은 selenium webdriver입니다. 셀레늄을 사용하면 백엔드와 다른 브라우저를 사용할 수 있으며, 아마도 귀하의 경우 매우 가벼운 htmlUnit이 이미 수행 할 것입니다. 좀 더 복잡한 JavaScript가 호출되면 종종 전체 브라우저를 실행하는 다른 선택의 여지가 없습니다. 다행히도 phantomjs이 있으며 그 풋 프린트는 그리 좋지 않습니다 (헤드리스 및 모두).

두 번째 가능성

또 다른 방법은 당신이 JSoup와 자바 스크립트 소스를 잡고 자바에서 자바 스크립트 인터프리터를 시작하는 것이 될 수있다. 이를 위해 Rhino을 사용할 수 있습니다. 그러나 그 경로를 간다면 HtmlUnit을 직접 사용할 수도 있습니다. 이는 아마도 조금 부피가 커질 것입니다.

관련 문제