HtmlUnit с GWT возвращает неполную страницу - PullRequest
1 голос
/ 18 января 2012

Я пытаюсь использовать HtmlUnit , чтобы проверить, что мой GWT веб-сайт загружается правильно.

К сожалению, страница, которую я загружаю, не кажется полной. В нем отсутствует контент, который можно просмотреть при посещении страницы в моем обычном браузере.

Вот мой модульный тест, который производит этот вывод:

WebClient webClient = new WebClient();
webClient.setThrowExceptionOnScriptError(false);

webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.waitForBackgroundJavaScript(30000);
HtmlPage page = webClient.getPage("http://www.ozdroid.com/#!BLOG/2010/10/12/How_to_Make_Google_AppEngine_Applications_Ajax_Crawlable");

System.out.println(page.asXml());
webClient.closeAllWindows();

Кто-нибудь знает, что я могу сделать, чтобы обойти это и получить полный HTML-сайт?

Редактировать

Вот что возвращает page.asXml() с обновленным кодом, который явно неполон:

<?xml version="1.0" encoding="ISO-8859-1"?>
<html xmlns:fb="http://www.facebook.com/2008/fbml>
&lt;head>
&lt;meta http-equiv=" content-type="">
  <head>
    <meta name="google-site-verification" content="_KCG8ec0LvgmXjnBAikAog0knc7jAbIGCu8Cmu2hsCI"/>
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
    <link rel="shortcut icon" href="favicon.ico"/>
    <link rel="icon" type="image/gif" href="favicon.gif"/>
    <title>
      OzDroid - Enterprise Solutions for Android | Laser Barcode
scanners | RFID | Handheld Computers | Rugged PDA's and Mobile Phones
    </title>
    <script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
//]]>
    </script>
    <script type="text/javascript" language="javascript" src="ozdroid/ozdroid.nocache.js">
    </script>
    <script defer="defer">
//<![CDATA[
ozdroid.onInjectionDone('ozdroid')
//]]>
    </script>
    <script src="http://www.google-analytics.com/ga.js" type="text/javascript">
    </script>
  </head>
  <body>
    <!-- OPTIONAL: include this if you want history support -->    <iframe src="javascript:''" id="__gwt_historyFrame" style="position: absolute; width: 0; height: 0; border: 0">
    </iframe>
    <noscript>

&lt;div
    style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif"&gt;
&lt;p&gt;Welcome, to the website of OzDroid, we sell and distribute rugged Android
 handheld computers, pda's and mobile phones. These devices can be equipped 
 with options including 1D and 2D laser barcode scanners, RFID, wifi,
  bluetooth and cameras.&lt;/p&gt;
 &lt;p&gt; In the near future, we also
 will be supplying logistics software for the same.
&lt;/p&gt;
&lt;p&gt;As this site contains dynamic content that relies on javascript,
 &lt;b&gt;your web browser must have JavaScript enabled&lt;/b&gt; in order for this site to
display correctly.
&lt;/p&gt;&lt;/div&gt;

    </noscript>
    <div id="fb-root">
    </div>
    <!-- Production -->    <script src="http://connect.facebook.net/en_GB/all.js">
    </script>
  </body>
</html>

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Cuga, сайт, который вы пытаетесь получить, принадлежит мне, это было немного излишним, когда я изучал некоторые материалы GWT и хотел сделать сайт сканируемым.Идея состояла в том, чтобы сделать простой блог, чтобы я мог сканировать динамический контент.Статьи блога извлекаются из хранилища данных appengine с использованием вызовов RPC, так что это был полезный тест.

Полный HTML-код обслуживается сайтом в соответствии со стандартами сканирования Googles Ajax и заменой #!with? _escaped_fragment_ =.

Приведенный ниже адрес должен извлечь страницу из App Engine

Ссылка

Вся работа, выполненная для создания снимка HTML всервер appengine выполняется HTMLUnit.Так что вряд ли это будет ошибка HTMLUnit.

К сожалению, некоторые вещи типа Facebook теперь не работают - я подозреваю, из-за изменений API - но, честно говоря, я действительно не смотрел, так как у меня есть другие приоритеты.

КАК Я не трогал это больше двух лет, я немного заржавел ...

ПОПРОБУЙТЕ ЭТО

поставить линию...

webClient.waitForBackgroundJavaScript(30000);

после получения страницы.Я думаю, что waitForBackgroundJavaScript () должен блокировать поток, в котором вы находитесь, пока весь javascript не запустится.Вызов его перед загрузкой страницы, вероятно, ничего не делает.

0 голосов
/ 18 декабря 2013

попробуйте

HtmlPage page = null;
try {
    page = webClient.getPage(url);
} catch (Exception e) {
    System.out.println("Get page error");
}
JavaScriptJobManager manager = page.getEnclosingWindow().getJobManager();
while (manager.getJobCount() > 0) {
    Thread.sleep(1000);
}
System.out.println(page.asXml());
return page;
...