Ответ 1
Если вы хотите избежать исключений из-за каких-либо ошибок JavaScript:
webClient.setThrowExceptionOnScriptError(false);
Можно ли учить HTMLUnit игнорировать сценарии/файлы javascript определенных на веб-странице? Некоторые из них просто находятся вне моего контроля (например, jQuery), и я ничего не могу с ними поделать. Предупреждения раздражают, например:
[WARN] com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument:
getElementById(script1299254732492) did a getElementByName for Internet Explorer
На самом деле я использую JSFUnit, и под ним работает HTMLUnit.
Если вы хотите избежать исключений из-за каких-либо ошибок JavaScript:
webClient.setThrowExceptionOnScriptError(false);
Ну, мне еще предстоит найти способ для этого, но я нашел эффективное обходное решение. Попробуйте реализовать FalsifyingWebConnection
. Посмотрите пример кода ниже.
public class PinConnectionWrapper extends FalsifyingWebConnection {
public PinConnectionWrapper(WebClient webClient)
throws IllegalArgumentException {
super(webClient);
}
@Override
public WebResponse getResponse(WebRequest request) throws IOException {
WebResponse res = super.getResponse(request);
if(res.getWebRequest().getUrl().toString().endsWith("/toolbar.js")) {
return createWebResponse(res.getWebRequest(), "",
"application/javascript", 200, "Ok");
}
return res;
}
}
В приведенном выше коде всякий раз, когда HtmlUnit будет запрашивать для toolbar.js, мой код просто вернет фальшивый пустой ответ. Вы можете подключить свой вышеописанный класс-оболочку к HtmlUnit, как показано ниже.
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
new PinConnectionWrapper(webClient);
Посмотрите WebClient.setScriptPreProcessor. Это даст вам возможность изменить (или в вашем случае, остановить) данный script до его выполнения.
Кроме того, если это только предупреждения, возникающие у вас на нервах, я бы предложил изменить уровень журнала.
Если вы заинтересованы в игнорировании всех записей журнала предупреждений, вы можете установить уровень журнала INFO для com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument в файле log4j.properties.
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);.
Вставьте этот код.