Вопрос

У меня приложение GWT, которое я пытаюсь указать.

Я использую htmlunit, чтобы получить содержание сгенерированного HTML:

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

Но я получаю следующую ошибку, и страница вернулась примерно пусто!

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.

РЕДАКТИРОВАТЬ:

Я имею в виду под пустым, вот снимок возвращенного HTML:

Обратите внимание, что не все данные, отображаемые на исходной странице (которая Got от DB) возвращается Htmlunit. И что "?" означает? Я не думаю, что это означает, что любая ошибка кодирования приводит к тому, что все слова ясные символы 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>
Это было полезно?

Решение 2

Ответ здесь:http://htmlunit.sourceforge.net/faq.html#ajaxdoesnotwork

Основным потоком с использованием HTMLUNIT может быть завершение выполнения, прежде чем позволять запускать фоновые потоки. У вас есть пара вариантов:

webclient.setajaxcontroller (новый красиво -синхронизирующий AjaxController ()); сообщите вашему экземпляру WebClient для повторного синхронизации асинхронного XHR. webclient.waitforbackgroundjavascript (10000); или webclient.waitforbackgroundjavascriptStartingFore (10000); Сразу после получения страницы и перед манипулированием ее. Явно ожидайте, что ожидаемое условие будет выполнено, когда ваш JavaScript работает, например,

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

Другие советы

HTMlunit может быть немного болтливым, и, в частности, может заставить вещи выглядеть хуже, чем они есть.

Создайте эти два класса:

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 
    {
    }
}

а также

import com.gargoylesoftware.htmlunit.IncorrectnessListener;

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

Затем, когда вы создаете свой WebClient ...

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

И тогда вы должны получить меньше предупреждений.

Что касается «приблизительно пустого» ... что это значит?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top