2017-09-17 11 views
0

私はhtmlunitを使ってウェブサイトを解析しています。次のコードが失敗している:HtmlUnit:JavaScriptを有効にする例外をスローする

WebClient wc = new WebClient(BrowserVersion.CHROME); 

    wc.getOptions().setCssEnabled(true); 

    wc.getOptions().setJavaScriptEnabled(true); 
    wc.getOptions().setThrowExceptionOnScriptError(true); 
    wc.waitForBackgroundJavaScript(10000); 
    wc.setJavaScriptTimeout(10000); 

//  wc.setAjaxController(new NicelyResynchronizingAjaxController()); 

    wc.getOptions().setUseInsecureSSL(true); 

    final HtmlPage currentPage = wc.getPage("<website_url>"); 

同じコードが動作する私はjavascriptを無効にした場合wc.getOptions().setJavaScriptEnabled(true)

エラー:

======= EXCEPTION START ======== 
Exception class=[java.lang.RuntimeException] 
com.gargoylesoftware.htmlunit.ScriptException: Exception invoking constructor 
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:894) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:637) 
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:518) 
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:774) 
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:750) 
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:102) 
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:991) 
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:366) 
at com.gargoylesoftware.htmlunit.html.HtmlScript$2.execute(HtmlScript.java:247) 
at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:268) 
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:800) 
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) 
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:756) 
at net.sourceforge.htmlunit.cyberneko.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1236) 
at net.sourceforge.htmlunit.cyberneko.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1136) 
at net.sourceforge.htmlunit.cyberneko.filters.DefaultFilter.endElement(DefaultFilter.java:226) 
at net.sourceforge.htmlunit.cyberneko.filters.NamespaceBinder.endElement(NamespaceBinder.java:345) 
at net.sourceforge.htmlunit.cyberneko.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3178) 
at net.sourceforge.htmlunit.cyberneko.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2141) 
at net.sourceforge.htmlunit.cyberneko.HTMLScanner.scanDocument(HTMLScanner.java:945) 
at net.sourceforge.htmlunit.cyberneko.HTMLConfiguration.parse(HTMLConfiguration.java:521) 
at net.sourceforge.htmlunit.cyberneko.HTMLConfiguration.parse(HTMLConfiguration.java:472) 
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:999) 
at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:250) 
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:192) 
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:272) 
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:160) 
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:522) 
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:396) 
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:313) 
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:461) 
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:446) 

Caused by: java.lang.NegativeArraySizeException 
at com.gargoylesoftware.htmlunit.javascript.host.arrays.ArrayBuffer.constructor(ArrayBuffer.java:44) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:153) 
... 46 more 
+0

そして、stackoverflowのどこかに見られるWebクライアントの設定を間違えてはいけません。前に何度も述べたように、wc.waitForBackgroundJavaScript(10000);現時点では完全ではありません。これは設定方法ではありません。この呼び出しは、何らかのアクション(たとえば、クリック)の後に置かれた場合にのみ便利です。ブラウザの設定に影響はありません! – RBRi

答えて

0

これはHtmlUnitのバグです。最新のスナップショットを使用し、エラーがまだ残っている場合は問題を開いてください。

私はその間に、HtmlUnitソースを調べるのに時間を割いた。バグが修正されました。ビルドが完了した後、ciサーバーから新しいビルドをダウンロードできます。 今週中に新しいSNAPSHOTビルドを利用できるようにします。

0

また、最新のSNAPSHOTビルドも利用できます。

関連する問題