Невозможный сайт для 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+взрослые%3A1+класс%3ACOACH&stoc=0&vo1=Солт+Озеро+Город%2C+UT+%28SLC%29+-+Солт+Озеро+Город+Международный+Аэропорт&o=SLC&ve1=Бангкок%2C+Таиланд+%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.

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

Затем выдается пара исключений из-за отсутствия «(» в паре скриптов на bing.com.

Потом вызывает javascript, потом резко обрывается.

Я понимаю, что это может быть несколько проблем, которые другие могут не увидеть, и поэтому, если нет предложений, не мог бы кто-нибудь прокачать эти два сайта через тестовую реализацию своего собственного использования HtmlUnit и посмотреть, могут ли они получить базовый вывод 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);

}

}

Спасибо!


person Stu Kalide    schedule 15.07.2010    source источник


Ответы (3)


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

client.setThrowExceptionOnScriptError( false ) ;

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

htmlpage init'd
<?xml version="1.0" encoding="utf-8"?>
<html id="">
  <head>
   ...
person Rodney Gitzel    schedule 16.07.2010
comment
хорошо сын пистолета ... спасибо! так стоит ли проходить, чтобы исправить ошибки и предупреждения? пока я получаю страницу, может быть, это не стоит усилий ... - person Stu Kalide; 31.07.2010
comment
Насколько я помню, многое из этого было просто записью информации. Это типично для моих тестов HtmlUnit, консоль извергается как сумасшедшая. Если страница выйдет, не беспокойтесь об этом. - person Rodney Gitzel; 31.07.2010
comment
Я просто хочу подтвердить, что добавление этой строки выше действительно работает. У меня тоже была такая же проблема - получаю сообщение об ошибке, в котором говорится, что я загружаю устаревший контент JS во время загрузки страницы. Затем, в конце концов, во время автоматической отправки формы ошибка заключается в том, что содержимое JS еще недоступно. Те же журналы по-прежнему появляются, но, по крайней мере, RuntimeException, которое вызывается и останавливает все выполнение, исчезает. Однако я думаю, что это только потому, что загружаемый JS не нужен мне для завершения ввода и отправки формы в первую очередь. - person MLQ; 29.07.2012

У меня также была проблема с "данные, необходимые для завершения этой операции, еще недоступны".
Переключение пользовательского агента на "Firefox" помогло...
http://steveliles.github.com/jquery_htmlunit_runtimeerror_messages_galore.html

person Alexander Link    schedule 17.07.2012

Браузеры очень терпимы к тому, что они могут определить как ошибки (в Javascript, но также и в HTML, css и т. д.). Отчасти это связано с различными конфликтующими «стандартами» :) того, как был реализован Javascript. То, что выглядит нормально в одном браузере, вызывает проблемы в другом. Поэтому, когда все эти сообщения становятся видимыми, это должно немного сбивать с толку.

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

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

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

person Pete Kelley    schedule 04.06.2014