Pregunta

Tengo una aplicación GWT que trato de índice.

Estoy utilizando HtmlUnit para obtener el contenido del código HTML generado:

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage refDesing = webClient.getPage("http://localhost:8080/MyGWTApp/#page2");
FileOutputStream fos1 = new FileOutputStream("D:\\work\\out\\page2.html");
fos1.write(refDesing.asXml().getBytes());
fos1.close();

Pero me sale el siguiente error y la página devuelta aproximadamente el vacío!

Dec 22, 2010 6:16:25 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'http://xxxxxxxxxxxx/xxxxxxxx/xxxxxxxx/xxxxxxxxxx.nocache.js', but got 'application/x-javascript'.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [485:24] Error in expression. Invalid token "=". Was expecting one of: <S>, <COMMA>, "/", <PLUS>, "-", <HASH>, <STRING>, ")", <URI>, "inherit", <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <DIMENSION>, <PERCENTAGE>, <NUMBER>, <FUNCTION>, <IDENT>.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [485:29] Error in style rule. Invalid token "\n". Was expecting one of: "}", ";".
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler warning
WARNING: CSS warning: null [485:29] Ignoring the following declarations in this rule.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [518:24] Error in expression. Invalid token "=". Was expecting one of: <S>, <COMMA>, "/", <PLUS>, "-", <HASH>, <STRING>, ")", <URI>, "inherit", <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <DIMENSION>, <PERCENTAGE>, <NUMBER>, <FUNCTION>, <IDENT>.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [518:29] Error in style rule. Invalid token "\n  ". Was expecting one of: "}", ";".
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler warning
WARNING: CSS warning: null [518:29] Ignoring the following declarations in this rule.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [541:24] Error in expression. Invalid token "=". Was expecting one of: <S>, <COMMA>, "/", <PLUS>, "-", <HASH>, <STRING>, ")", <URI>, "inherit", <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <DIMENSION>, <PERCENTAGE>, <NUMBER>, <FUNCTION>, <IDENT>.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [541:29] Error in style rule. Invalid token "\n  ". Was expecting one of: "}", ";".
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler warning
WARNING: CSS warning: null [541:29] Ignoring the following declarations in this rule.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [951:24] Error in expression. Invalid token "=". Was expecting one of: <S>, <COMMA>, "/", <PLUS>, "-", <HASH>, <STRING>, ")", <URI>, "inherit", <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <DIMENSION>, <PERCENTAGE>, <NUMBER>, <FUNCTION>, <IDENT>.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [951:29] Error in style rule. Invalid token "\n". Was expecting one of: "}", ";".
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler warning
WARNING: CSS warning: null [951:29] Ignoring the following declarations in this rule.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [977:24] Error in expression. Invalid token "=". Was expecting one of: <S>, <COMMA>, "/", <PLUS>, "-", <HASH>, <STRING>, ")", <URI>, "inherit", <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <DIMENSION>, <PERCENTAGE>, <NUMBER>, <FUNCTION>, <IDENT>.
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: null [977:29] Error in style rule. Invalid token "\n". Was expecting one of: "}", ";".
Dec 22, 2010 6:16:27 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler warning
WARNING: CSS warning: null [977:29] Ignoring the following declarations in this rule.

EDIT:

¿Qué quiero decir es aproximadamente vacías, de aquí instantánea del HTML devuelto:

Tenga en cuenta que no todos los datos que se muestran en la página original (que obtuvo original del DB) es devuelto por HtmlUnit. También lo que "?" ¿medio? No creo que significa cualquier error de codificación causa todas las palabras son claras caracteres ASCII.

<td align="center" style="vertical-align: top;">
    <table class="refDesignGrid" cellspacing="5">
      <colgroup>
        <col/>
      </colgroup>
      <tbody align="left">
        <tr>
          <td align="left" style="vertical-align: top;">
            <table cellpadding="0" class="categoryItem" cellspacing="0">
              <tbody align="left">
                <tr>
                  <td align="left" style="vertical-align: top;">
                    <div class="header4">
                      C++
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </td>
          <td align="left" style="vertical-align: top;">
            <table cellpadding="0" class="categoryItem" cellspacing="0">
              <tbody align="left">
                <tr>
                  <td align="left" style="vertical-align: top;">
                    <div class="header4">
                      Java
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </td>
          <td align="left">
            <table cellpadding="0" class="categoryItem" cellspacing="0">
              <tbody align="left">
                <tr>
                  <td align="left" style="vertical-align: top;">
                    <div class="header4">
                      C#
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </td>
          <td>
            ?
          </td>
        </tr>
        <tr>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
        </tr>
        <tr>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
        </tr>
        <tr>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
        </tr>
        <tr>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
          <td>
            ?
          </td>
        </tr>
      </tbody>
    </table>
  </td>
</tr>
</tbody>
</table>
</div>
¿Fue útil?

Solución 2

respuesta está aquí: http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork

El hilo principal usando HtmlUnit puede terminando ejecución antes permitiendo que las discusiones de fondo para correr. Usted tiene un par de opciones:

webClient.setAjaxController (nueva NicelyResynchronizingAjaxController ()); le dirá a su cliente Web ejemplo, para volver a sincronizar XHR asíncrono. webClient.waitForBackgroundJavaScript (10000); o webClient.waitForBackgroundJavaScriptStartingBefore (10000); justo después de consiguiendo la página y antes de manipularla. Explícitamente esperar una condición que se espera que se cumpla cuando el JavaScript se ejecuta, por ejemplo.

//try 20 times to wait .5 second each for filling the page.
for (int i = 0; i < 20; i++) {
    if (condition_to_happen_after_js_execution) {
         break;
     }
     synchronized (page) {
         page.wait(500);
     }
}

Otros consejos

HtmlUnit puede ser un poco hablador, y en particular puede hacer que las cosas se ven peor que ellos.

Crea estas dos clases:

import org.w3c.css.sac.CSSException;
import org.w3c.css.sac.CSSParseException;
import com.gargoylesoftware.htmlunit.DefaultCssErrorHandler;

/*
 * get rid of warnings... and provide a place to hang a break point
 */
public class QuietCssErrorHandler
    extends DefaultCssErrorHandler
{

    @Override public void error( CSSParseException e ) throws CSSException 
    {
        super.error( e ) ;
    }

    @Override public void fatalError( CSSParseException e ) throws CSSException 
    { 
        super.fatalError( e ) ; 
    }

    @Override public void warning( CSSParseException e ) throws CSSException 
    {
    }
}

y

import com.gargoylesoftware.htmlunit.IncorrectnessListener;

public class SilentIncorrectnessListener
    implements IncorrectnessListener
{
    @Override public void notify( String message, Object origin ) 
    {
        // do nuttin' honey!
    }
}

A continuación, cuando se crea el cliente Web ...

wc.setIncorrectnessListener( new SilentIncorrectnessListener() ) ;
wc.setCssErrorHandler( new QuietCssErrorHandler() ) ;

Y a continuación, debe tener un menor número de advertencias.

En cuanto a "aproximadamente vaciar" ... ¿qué significa eso?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top