How to tell htmlunit to ignore certain errors
I am currently testing HtmlUnit. I want to fill out a form and then submit it. But this results in an error that appears to be caused by the file not being available, which triggers a reset connection. How can I suppress this as it is not critical given the loading process of the entire website? It doesn't seem to affect the program, but I just want it to be disabled.
Apr 05, 2012 12:25:13 PM com.gargoylesoftware.htmlunit.html.HtmlPage loadExternalJavaScriptFile
Schwerwiegend(severe): Error loading JavaScript from [*link*].
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264)
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:645)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:152)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1439)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1358)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadJavaScriptFromUrl(HtmlPage.java:1008)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:950)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:349)
at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:230)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:642)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$400(JavaScriptEngine.java:79)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:590)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:499)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:474)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:870)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeInlineScriptIfNeeded(HtmlScript.java:302)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:368)
at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:230)
at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:240)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:598)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:556)
at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1142)
at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1044)
at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:329)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3018)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2005)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:908)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:789)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:225)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:179)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:221)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:106)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:433)
at com.gargoylesoftware.htmlunit.WebClient.loadDownloadedResponses(WebClient.java:2187)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:625)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.processPostponedActions(JavaScriptEngine.java:707)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1246)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1195)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1158)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:138)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:99)
at com.tronicguard.discovery.WebsiteManipulatorImplementation.<init>(WebsiteManipulatorImplementation.java:71)
at Main.main(Main.java:10)
source to share
HtmlPage.loadExternalJavaScriptFile()
always logs this error depending on the logging settings. You need to disable page logging or change the threshold.
For example, if you are using log4j you can set the property log4j.logger.com.gargoylesoftware.htmlunit.html.HtmlPage = FATAL
This, however, will hide the log of all errors logged in the HtmlPage.
source to share
Try disabling the annoying warnings in HtmlUnit (sorry if the code isn't quite right - I "translated" it from Clojure, but I hope you get the basic idea at least):
Import java.util.logging.Logger;
Import java.util.logging.Level;
Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
Take a look at Rotating HtmlUnit Warnings for more information. There was a more complex solution out there, but this simple one worked for me.
source to share
Use this:
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);
source to share
SPECIFY DRIVER htmlUnit AS FOLLOWS:
driver = new SilentHtmlUnitDriver (features);
ADD THE FOLLOWING LIKE FAULTY CLASS (in the same class you instantiated the driver):
protected class SilentHtmlUnitDriver extends HtmlUnitDriver {
SilentHtmlUnitDriver() {
super();
this.getWebClient().setCssErrorHandler(new SilentCssErrorHandler());
this.getWebClient().getOptions().setThrowExceptionOnFailingStatusCode(false);
this.getWebClient().getOptions().setThrowExceptionOnScriptError(false);
}
SilentHtmlUnitDriver(DesiredCapabilities capabilities) {
super(capabilities);
this.getWebClient().setCssErrorHandler(new SilentCssErrorHandler());
}
}
source to share