2017-11-04 10 views
0

このコードでは、URLで指定されたWebサイトのhtmlコードを解析しようとしています。WebサイトのHTMLコードの解析:htmlunit.javascript.StrictErrorReporter runtimeError

私は最初にjsoup.connect.getを試しましたが、ドキュメントに読み込まれていたhtmlコードがブラウザで見られたものではありませんでした。その後、私はjsoupがjavascript/ajaxベースのページのHTMLコードを完全に取り出すことができないというnetで与えられたフィードバックに基づいてhtmlunitを使い始めました。 Javaへの新しい

Nov 05, 2017 12:40:15 AM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError SEVERE: runtimeError: message=[Exceeded maximum stack depth] sourceName=[script in http://www.dspblackrock.com/about-us/mandatory-disclosure/month-end-portfolio-disclosures from (8, 9) to (26, 10)] line=[22] lineSource=[null] lineOffset=[0] Nov 05, 2017 12:40:15 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify WARNING: Obsolete content type encountered: 'text/javascript'. Nov 05, 2017 12:40:15 AM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError SEVERE: runtimeError: message=[Exceeded maximum stack depth] sourceName=[ http://www.dspblackrock.com/TSPD/08ca5204faab20006bf1735bede287affd051075f25a20bf70034ef55ad0ac427b287aacb10e6976?type=7] line=[70] lineSource=[null] lineOffset=[0]

アム:私はhtmlunitパッケージとそのWebClientクラスを使用すると、私は次のエラーを取得しています。まず、問題に適切な方法でhtmlUnitを使用していますか?上記のエラーを解決するにはどうすればよいですか?

import java.io.*; 
import java.net.*; 
import java.io.IOException; 
import org.jsoup.Jsoup; 
import org.jsoup.parser.Parser; 
import org.jsoup.nodes.Document; 
import org.apache.commons.validator.routines.UrlValidator; 
import com.gargoylesoftware.htmlunit.BrowserVersion; 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 

public class URLToFile { 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    System.out.println("Hello World!"); 
     String url; 

     UrlValidator urlValidator = new UrlValidator(); 
     try { 

     url = "http://www.dspblackrock.com/about-us/mandatory-disclosure/month-end-portfolio-disclosures"; 
     WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52); 
     webClient.getOptions().setJavaScriptEnabled(true); 
     webClient.getOptions().setThrowExceptionOnScriptError(false); 
     webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); 
     HtmlPage myPage = webClient.getPage(url); 
     webClient.close(); 
     Document doc = Jsoup.parse(myPage.asXml()); 
     System.out.println(doc); 
     } catch (MalformedURLException mue) { 

      System.out.println("Ouch - a MalformedURLException happened."); 
      mue.printStackTrace(); 
      System.exit(1); 

      } catch (IOException ioe) { 

      System.out.println("Oops- an IOException happened."); 
      ioe.printStackTrace(); 
      System.exit(1); 

      } finally { 
       System.out.println("Entered finally"); 
      } // end of 'finally' clause 
    } 
} 

答えて

0

最新のSNAPSHOTのHtmlUnitビルドを使用していることを確認してください。このバージョンで簡単なテストを行って、ページが機能します。

Document doc = Jsoup.parse(myPage.asXml()); 

を行う

は、私の視点から悪い考えです。

  1. HtmlUnitは独自のモデルです。あなたはHtmlUnit APIを使ってJsoupでできるすべてのことを行うこともできます。
  2. あなたがやったの変換に基づいていくつかの情報を失うかもしれないあなたはHtmlUnitのAPI(およびモデル)を使用する場合は、ボタンをクリックした場合、あなたはまだJavaScriptのサポート(例えばを持っている(HtmlUnit DOM - > Jsoup DOM - > XML)
  3. すべてのイベントがトリガーされます)。私はページでこれを見つけたいくつかのより多くの分析の後

(最小化/難読化)のソースコード:

iL(/\x3c/.test(function() { 
    return "\x3c" 
}) & !/x3d/.test(function() { 
    return "'x3'+'d';" 
})); 

このhere

についてもっと読むしようとしているページの背後にある人々のように見えます鼻を検出する。私は、このページをHtmlUnitを使用して利用できるようにするのは難しい仕事であると懸念しています。

+0

HtmlUnitの最新スナップショットバージョンは何ですか?私はhtmlunit-2.27-OSGi.jarを使用しています。これは私が得ることができる最新です。 – SantoshV

+0

これは最新のリリースです。 OSGiバージョンが必要ですか? 2.28-SNAPSHOTを試してみてください。 – RBRi

+0

OSGIのどのバージョンが違うのか分かりません。 2.28バージョンのjarファイルを教えてください。私はそれのためにグーグルを試みたが、成功しなかった。 – SantoshV