【问题标题】:Turning HtmlUnit Warnings off关闭 HtmlUnit 警告
【发布时间】:2011-04-05 18:14:09
【问题描述】:

您知道如何关闭 HtmlUnit 中的警告、注释、错误吗?

【问题讨论】:

    标签: warnings htmlunit


    【解决方案1】:

    试试这个,它对我有用。

    WebClient webClient = new WebClient();
    webClient.getOptions().setJavaScriptEnabled(false);
    webClient.getOptions().setCssEnabled(false);
    

    【讨论】:

    • 这是禁用页面上的 CSS 和 Javascript。这不是本意。
    【解决方案2】:

    我必须做一些与上面每个人不同的事情。我目前已将 htmlunit 设置为 Spring 项目,并删除了将 logback.xml 添加到我的资源目录所需的日志。将以下内容作为 logback.xml 添加到您的 main/java/resources 目录中 - 这将仅输出 INFO 级别的日志语句,而以下则不输出 (When to use the different log levels)

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
        <!--<logger name="org.springframework.web" level="INFO"/>-->
    
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{20}] %-5level - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>gdaxDesktop.log</file>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %logger{20} %-5level - %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="info">
            <!--<appender-ref ref="FILE"/>-->
            <appender-ref ref="CONSOLE"/>
        </root>
    </configuration>
    

    【讨论】:

    • 这里的情况相同,使用最新版本的 Spring Boot。不错的提示。
    【解决方案3】:

    如果您不需要 JavaScript 支持,这是禁用它的最简单方法:

    WebClient client = new WebClient(BrowserVersion.BEST_SUPPORTED);
    client.getOptions().setThrowExceptionOnFailingStatusCode(false);
    client.getOptions().setPrintContentOnFailingStatusCode(false);
    client.getOptions().setThrowExceptionOnScriptError(false);
    client.getOptions().setJavaScriptEnabled(false);
    client.setCssErrorHandler(new SilentCssErrorHandler());
    client.setHTMLParserListener(new HTMLParserListener() {
        @Override
        public void error(String message, URL url, String html, int line, int column, String key) {
        }
    
        @Override
        public void warning(String message, URL url, String html, int line, int column, String key) {
        }
    });
    

    您还可以禁用异常并记录失败的状态代码、JavaScript、CSS 错误和 HTML 解析错误。

    如果您需要 JavaScript 支持,您可以对 JavaScript 错误使用自定义实现:

    client.setJavaScriptErrorListener(new JavaScriptErrorListener() {
        @Override
        public void timeoutError(HtmlPage arg0, long arg1, long arg2) {
        }
    
        @Override
        public void scriptException(HtmlPage arg0, ScriptException arg1) {
        }
    
        @Override
        public void malformedScriptURL(HtmlPage arg0, String arg1, MalformedURLException arg2) {
        }
    
        @Override
        public void loadScriptError(HtmlPage arg0, URL arg1, Exception arg2) {
        }
    });
    

    如果你不需要,你也可以禁用它:

    client.getOptions().setCssEnabled(false);
    

    因此无需配置任何其他 Logger。

    【讨论】:

      【解决方案4】:

      把它放在代码开头的某个地方;它会闭上它的脏嘴:

      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);
      
      webClient = new WebClient(bv);
      webClient.setCssEnabled(false);
      
      webClient.setIncorrectnessListener(new IncorrectnessListener() {
      
          @Override
          public void notify(String arg0, Object arg1) {
              // TODO Auto-generated method stub
      
          }
      });
      webClient.setCssErrorHandler(new ErrorHandler() {
      
          @Override
          public void warning(CSSParseException exception) throws CSSException {
              // TODO Auto-generated method stub
      
          }
      
          @Override
          public void fatalError(CSSParseException exception) throws CSSException {
              // TODO Auto-generated method stub
      
          }
      
          @Override
          public void error(CSSParseException exception) throws CSSException {
              // TODO Auto-generated method stub
      
          }
      });
      webClient.setJavaScriptErrorListener(new JavaScriptErrorListener() {
      
          @Override
          public void timeoutError(HtmlPage arg0, long arg1, long arg2) {
              // TODO Auto-generated method stub
      
          }
      
          @Override
          public void scriptException(HtmlPage arg0, ScriptException arg1) {
              // TODO Auto-generated method stub
      
          }
      
          @Override
          public void malformedScriptURL(HtmlPage arg0, String arg1, MalformedURLException arg2) {
              // TODO Auto-generated method stub
      
          }
      
          @Override
          public void loadScriptError(HtmlPage arg0, URL arg1, Exception arg2) {
              // TODO Auto-generated method stub
      
          }
      });
      webClient.setHTMLParserListener(new HTMLParserListener() {
      
          @Override
          public void warning(String arg0, URL arg1, int arg2, int arg3, String arg4) {
              // TODO Auto-generated method stub
      
          }
      
          @Override
          public void error(String arg0, URL arg1, int arg2, int arg3, String arg4) {
              // TODO Auto-generated method stub
      
          }
      });
      
      webClient.setThrowExceptionOnFailingStatusCode(false);
      webClient.setThrowExceptionOnScriptError(false);
      

      【讨论】:

      • HtmlUnit 提供SilentCssErrorHandler,因此您不必为setCssErrorHandler(ErrorHandler) 创建一个空的匿名内部类。
      • 我不必使用所有这些。只需使用 java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);为我工作。
      • 值得一提的是,在某些版本中,您必须先在 webClient 上调用getOptions() 来设置此示例中的抛出异常选项,例如:webClient.getOptions().setThrowExceptionOnScriptError(false);
      • 即便如此,我仍然会收到“RHINO USAGE WARNING”以防止 rhino 警告?
      • 仍然收到警告:来自 c.g.htmlunit.html.HtmlScript 的“脚本不是 JavaScript”
      【解决方案5】:

      Arsen Zahray's answer 中的代码帮助删除了几乎所有由 HtmlUnit 生成的日志。

      但一次编辑有助于将它们全部删除。使用:

      java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 
      

      代替:

      java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
      

      【讨论】:

      • java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);
      【解决方案6】:

      您可以在此处获取有关how to manipulate logging of HtmlUnit 的信息。

      这是我添加到 log4j.properties 的内容,以禁用来自 HtmlUnit 组件的详细调试消息:

      # Set specific logger levels.
      log4j.logger.org.mortbay.log=fatal
      log4j.logger.org.apache.http=fatal
      log4j.logger.org.apache.http.headers=fatal
      log4j.logger.org.apache.http.wire=fatal
      # For HttpClient 3, which is used by FirefoxDriver
      log4j.logger.httpclient.wire=fatal
      log4j.logger.org.apache.commons=fatal
      log4j.logger.com.gargoylesoftware.htmlunit=fatal
      log4j.logger.com.gargoylesoftware.htmlunit.WebTestCase=fatal
      # Change this to TRACE when enabling the debugger.
      log4j.logger.com.gargoylesoftware.htmlunit.javascript.DebugFrameImpl=fatal
      

      【讨论】:

      • 为我工作,并没有完全关闭日志记录,这对我很有用,因为我想查看致命错误。
      【解决方案7】:

      尝试以下代码将日志记录级别关闭:

      java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
      

      【讨论】:

        【解决方案8】:

        尝试将此添加到您的代码中:

        LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
        

        基本上,这会使记录器记录到NoOpLog,它不会将日志信息写入任何地方。

        【讨论】:

          【解决方案9】:

          对我来说效果很好的一个选项是将 HtmlUnit 记录器更改为记录到不同的文件,这样我就有这些错误,以防我需要在一段时间内引用它,而且它也不会弄乱我的主日志。 以下是我对log4j.properties 所做的log4j 更改:

          log4j.logger.com.gargoylesoftware.htmlunit=ERROR, HTMLUNIT
          log4j.additivity.com.gargoylesoftware.htmlunit=false
          log4j.appender.HTMLUNIT = org.apache.log4j.RollingFileAppender
          log4j.appender.HTMLUNIT.layout=org.apache.log4j.PatternLayout
          log4j.appender.HTMLUNIT.layout.ConversionPattern=%m%n
          log4j.appender.HTMLUNIT.File=logs/HtmlUnitLog4j.log
          log4j.appender.HTMLUNIT.MaxFileSize=5MB
          log4j.appender.HTMLUNIT.MaxBackupIndex=5
          

          【讨论】:

            【解决方案10】:

            现在在 HtmlUnit 2.9 中,WebClient.setCssErrorHandler(new SilentCssErrorHandler()) 可以方便地忽略警告和错误。例如:

            @Override
            protected WebClient modifyWebClient(WebClient client) {
                // currently does nothing, but may be changed in future versions
                WebClient modifiedClient = super.modifyWebClient(client);
            
                modifiedClient.getOptions().setThrowExceptionOnScriptError(false);
                modifiedClient.setCssErrorHandler(new SilentCssErrorHandler());
            
                return modifiedClient;
            }
            

            【讨论】:

              【解决方案11】:

              关闭记录器。但这不是一个好的解决方案,因为您可能希望在日志中出现一些不常见的问题。

              我知道 HtmlUnit 会产生很多不重要的异常、警告等。您可以使用以下方法抑制其中的一些:

              client.getOptions().setThrowExceptionOnFailingStatusCode(false);
              client.getOptions().setThrowExceptionOnScriptError(false);
              client.getOptions().setPrintContentOnFailingStatusCode(false);
              

              【讨论】:

                【解决方案12】:

                这对我有用:

                @Test
                    public void homePage() throws Exception {
                        final WebClient webClient = new WebClient();   
                 webClient.setThrowExceptionOnScriptError(false);
                    final HtmlPage page = webClient.getPage("http://localhost:8080/web/guest/home");
                

                【讨论】:

                  【解决方案13】:

                  只需将此字符串添加到您的log4.properties

                  log4j.logger.com.gargoylesoftware.htmlunit=fatal
                  

                  【讨论】:

                    【解决方案14】:

                    我正在使用下面的代码,它运行良好:

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

                    【讨论】:

                      【解决方案15】:

                      要从最新版本的 HtmlUnit 中删除所有输出,您只需将这些行添加到静态块或主类中:

                      java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 
                      System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
                      

                      不需要像其他答案状态那样覆盖任何方法。

                      【讨论】:

                      • 这很好用,上面的第一个答案不再起作用了。
                      • 对我不起作用。 HtmlUnit 2.26。我必须更新我的log4j.propertieslog4j.logger.com.gargoylesoftware=error
                      【解决方案16】:

                      看看docs

                      有一个测试套件使用的示例 log4 文件,你可以找到它here,如果你愿意,你可以禁用一切。

                      【讨论】:

                        猜你喜欢
                        • 2023-04-03
                        • 1970-01-01
                        • 2014-06-24
                        • 2018-08-26
                        • 2015-05-19
                        • 2023-03-09
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多