2017-09-17 5 views
0

htmlunit을 사용하여 웹 사이트를 구문 분석하고 있습니다. 다음 코드는 실패 :HtmlUnit : 자바 스크립트 사용 예외 발생

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>"); 

동일한 코드가 작동 내가 자바 스크립트를 사용하지 않으면 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 어딘가에 본 웹 클라이언트의 잘못된 설정을 반복하지 마십시오. 줄 앞에서 여러 번 언급했듯이 wc.waitForBackgroundJavaScript (10000); 이 시점에서 완전한 말입니다. 이것은 설정 방법이 아닙니다. 이 호출은 특정 동작 (예 : 클릭) 후에 배치 한 경우에만 유용합니다. 브라우저 설정에는 영향이 없습니다! – RBRi

답변

0

이는 HtmlUnit과 버그입니다. 최신 스냅 샷을 사용하고 오류가 계속 발생하면 문제를여십시오.

그 사이에 HtmlUnit 소스를 살펴볼 시간이있었습니다. 이제 버그가 수정되었으며 ci 서버에서 새 빌드를 다운로드 할 수 있습니다 (빌드가 완료된 후). 이번 주 중에 새로운 SNAPSHOT 빌드를 사용할 수있게 만들 것입니다.

0

사용할 수있는 새로 고침 된 SNAPSHOT 빌드가 있습니다.