2010-07-15 4 views
7

я не могу, за жизнь мне, вышка HtmlUnit, чтобы захватить этот сайт:Невозможный сайт для HtmlUnit?

http://www.bing.com/travel/flight/flightSearch?form=FORMTRVLGENERIC&q=flights+from+SLC+to+BKK+leave+07%2F30%2F2010+return+08%2F11%2F2010+adults%3A1+class%3ACOACH&stoc=0&vo1=Salt+Lake+City%2C+UT+%28SLC%29+-+Salt+Lake+City+International+Airport&o=SLC&ve1=Bangkok%2C+Thailand+%28BKK%29+-+Suvarnabhumi+International&e=BKK&d1=07%2F30%2F2010&r1=08%2F11%2F2010&p=1&b=COACH&baf=true

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

Я также попробовал просто захватить bing.com/travel и не добился успеха. Он разбивается на функцию getPage нового клиента HtmlPage.

Выход дает множество runtimeErrors («данные, необходимые для завершения этой операции пока не доступен»), все по той же SourceName («http://www.bing.com/travel/jsxc.vjs?a=common&v=5.5.0-1278007084280»)

Тогда пара исключений брошенной пропавшего «("через пару скриптов на bing.com.

затем вызывается JavaScript, а затем обрывается.

Я понимаю, что это может быть несколько проблем, которые другие не могли бы быть в состоянии видеть, и поэтому, если есть никаких предложений, кто-то не мог бы перекачать эти два сайта через тестовую реализацию собственного Ht mlUnit использовать и посмотреть, смогут ли они получить базовый результат XML или текстовых результатов? Я не пытаюсь сделать что-то интересное здесь, просто получайте базовый текст или результат вывода результатов XML.

Было бы удобно знать, работает ли какая-либо другая реализация, чтобы я мог завершить мой проект присяжных.

КОД:

import com.gargoylesoftware.htmlunit.html.HtmlPage; 
import com.gargoylesoftware.htmlunit.WebClient; 

public class test { 

public static void main(String[] args) throws Exception { 

     WebClient client = new WebClient(); 
     System.out.println("webclient loaded"); 

     HtmlPage currentPage = client.getPage("http://www.bing.com/travel/flight/flightSearch?form=FORMTRVLGENERIC&q=flights+from+SLC+to+BKK+leave+07%2F30%2F2010+return+08%2F11%2F2010+adults%3A1+class%3ACOACH&stoc=0&vo1=Salt+Lake+City%2C+UT+%28SLC%29+-+Salt+Lake+City+International+Airport&o=SLC&ve1=Bangkok%2C+Thailand+%28BKK%29+-+Suvarnabhumi+International&e=BKK&d1=07%2F30%2F2010&r1=08%2F11%2F2010&p=1&b=COACH&baf=true"); 
     client.waitForBackgroundJavaScript(10000); 
     System.out.println("htmlpage init'd"); 

     //System.out.println(currentPage.getTitleText()); 
     String textSource = currentPage.asXml(); 
     System.out.println(textSource); 

} 

} 

Спасибо!

ответ

3

Попробуйте добавить это:

client.setThrowExceptionOnScriptError(false) ; 

Это занимает много времени, чтобы бежать, и мальчик делает это извергнуть протоколирование ... но в конце концов страница вышла:

htmlpage init'd 
<?xml version="1.0" encoding="utf-8"?> 
<html id=""> 
    <head> 
    ... 
+0

а сукин сын ... спасибо! так стоит идти до исправить ошибки и предупреждения? до тех пор, пока я получаю страницу, возможно, это не стоит усилий ... –

+0

Из того, что я помню, это было всего лишь информация о регистрации. Это типично для моих тестов HtmlUnit, консольных spews как сумасшедшие Если страница выходит, не беспокойтесь об этом. –

+0

Я просто хочу подтвердить, что добавление этой строки выше действительно работает. У меня тоже была такая же проблема - получение ошибки, в которой говорится, что я загружаю устаревший контент JS во время загрузки страницы. Затем, в конечном счете, во время автоматической подачи формы ошибка заключается в том, что содержимое JS еще не доступно. Те же журналы все еще появляются, но, по крайней мере, исключение RuntimeException, которое бросает и останавливает выполнение, исчезло. Тем не менее, я думаю, что только потому, что JS, который загружался, не является обязательным для меня, чтобы заполнить ввод и представление формы в первую очередь. –

2

Браузеры имеют высокую терпимость к тому, что они могут обнаружить как ошибки (в Javascript, но и HTML, CSS и так далее). Это отчасти из-за различных противоречивых «стандартов» :) о том, как был реализован Javascript. Что-то, что появляется в одном браузере, вызывает проблемы с другим. Итак, когда все эти сообщения становятся видимыми, это должно быть немного смущающим.

Чтобы представить это в перспективе - в Internet Explorer зайдите в свои настройки и проверьте «Расширенные настройки» для «Отобразить уведомление о каждой ошибке сценария», а затем просматривайте те же сайты. Вы можете быть удивлены тем, сколько кода IE получает, просто игнорируя то, что оно может обнаружить как проблемы.

Использование HtmlUnit в разных браузерах просто приводит к возникновению некоторых из этих конфликтов.

Сообщить об этом HtmlУказать что-то вроде «Игнорировать ...для этого браузера "- это совершенно правильная практика. В моем случае я привожу данные с сайта, который проверяет, что все пользователи используют Internet Explorer (нет, у меня нет хорошей идеи, почему они это делают), поэтому я могу «т обойтись без игнорирования JavaScript ошибок. Интересно, что сайт отлично работает, даже если IE считает, что там уже много ошибок Javascript.

Смежные вопросы