Невозможный сайт для HtmlUnit? - PullRequest
7 голосов
/ 15 июля 2010

Я не могу, на всю жизнь, настроить 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, а затем внезапно заканчивается.

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

}

}

Спасибо!

Ответы [ 3 ]

3 голосов
/ 16 июля 2010

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

client.setThrowExceptionOnScriptError( false ) ;

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

htmlpage init'd
<?xml version="1.0" encoding="utf-8"?>
<html id="">
  <head>
   ...
2 голосов
/ 04 июня 2014

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

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

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

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

2 голосов
/ 17 июля 2012

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

...