2017-06-21 16 views
0

問題:HtmlUnit:スキップJSの実行

  • 私はHtmlUnitを使用してJSによって生成されたページを解析しています。
  • すべてのJSが読み込まれ、ページが解析されるまで待つ必要があります。
  • これらのページはすべて同じJSスクリプトを共有します。
  • 解析しない1つの問題のあるスクリプトがあります。
  • 問題のあるスクリプトは、HTMLレンダリングには影響しません。私が何をしたいか

  • が、私は問題のスクリプトの名前を検出します。
  • ブラックリストにこの名前を付けてください。
  • さらに解析するためにスキップしてください。

これは私がJSのロードに使用するコードです...

private void waitForJs(WebClient client, HtmlPage page) throws Exception { 
    int maxDelay = 1000; 
    int attempts = 10; 
    int i = client.waitForBackgroundJavaScript(maxDelay); 
    while (i > 0 && attempts > 0) { 
     i = client.waitForBackgroundJavaScript(maxDelay); 
     if (i == 0) { 
     break; 
     } 
     synchronized (page) { 
     page.wait(500); 
     } 
     log("Waiting for JS (" + i + "), attempts: " + attempts, false); 
     attempts--; 
    } 
    } 

私はintoduceしなければならなかった、破損したスクリプトの読み込みが進まないようにするために変数を「試み」。この代わりに、問題のあるスクリプトをすべて待ちリストに残しておき、先物への読み込みをスキップしたい。出来ますか?

答えて

0

あなたはhere示唆したように、空の文字列にするためにJavaScriptの内容を変更することができます。

new WebConnectionWrapper(webClient) { 

     public WebResponse getResponse(WebRequest request) throws IOException { 
      WebResponse response = super.getResponse(request); 
      if (request.getUrl().toExternalForm().contains("my_url")) { 
       String content = response.getContentAsString(); 

       // change content 
       content = ""; 

       WebResponseData data = new WebResponseData(content.getBytes(), 
         response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders()); 
       response = new WebResponse(data, request, response.getLoadTime()); 
      } 
      return response; 
     } 
    }; 
+0

あなたはどのように私はあなたのコードを使用して、すべての内部JavaScriptを読み込むことができますについて、元のためにそれらを実行してロードした後、より特異的であり得ますページ? – Michal

関連する問題