2012-01-17 3 views
1

Я пытаюсь использовать HtmlUnit, чтобы проверить, что мой сайт GWT загружен правильно.HtmlUnit with 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> 

Благодаря

+0

GWT приложения богатые приложения Javascript, а не только статические веб-страницы. Разметка HTML не будет содержать источник всего, что вы видите при загрузке страницы в браузере - большая часть из них загружается javascript. –

+0

Возможно, это ошибка htmlunit, почему бы вам не спросить? – milan

+0

@NickJohnson Я использую HtmlUnit для точной цели просмотра полностью отображаемой страницы. – Cuga

ответ

2

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

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

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

Link

Вся работа для генерации HTML-снимок на сервере Appengine осуществляется HtmlUnit. Таким образом, это вряд ли будет ошибкой HTMLUnit.

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

AS Я не коснулся этого в течение двух лет я немного ржавый ...

TRY ЭТО

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

webClient.waitForBackgroundJavaScript(30000); 

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

+0

Эй, спасибо, спасибо за помощь.Реальный сайт, который я вытаскиваю, находится на dev-сервере. Я использовал ваш URL как пример, потому что я следил за вашим учебным курсом и заметил тот же результат при попытке вашего URL как нашего сайта-разработчика. Я заметил, что ваш сайт будет работать, если «время ожидания» было установлено достаточно долго, но наш сайт-разработчик не будет. Я думаю, что может быть ошибка в последнем GWT или GAE SDK, так как наш сайт также не загружается в IE. В любом случае, еще раз спасибо за учебное пособие и помощь. – Cuga

0

попробовать это

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; 
Смежные вопросы