7

私の人生では、このサイトを取得するために 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=塩+湖+都市%2C+UT+%28SLC%29+-+塩+湖+都市+国際+空港&o=SLC&ve1=バンコク%2C+タイ+%28BKK%29+-+スワンナプーム+国際&e= BKK&d1=07%2F30%2F2010&r1=08%2F11%2F2010&p=1&b=コーチ&baf=true

バックグラウンドで実行されている膨大な量のスクリプトに関係していると確信しています。おそらく、これらのスクリプトが完全に読み込まれるのに十分な時間が与えられていないのでしょうか?

また、単純に bing.com/travel を取得しようとしましたが、どちらも成功しませんでした。新しい HtmlPage クライアントの getPage 関数が壊れています。

出力には、すべて同じ sourceName (" http://www.bing.com/travel/jsxc.vjs?a=common&v=5.5 .0-1278007084280 ")

次に、bing.com のいくつかのスクリプトで "(" が欠落しているためにいくつかの例外がスローされました。

次にjavascriptを呼び出し、突然終了します。

これは、他の人が見ることができないいくつかの問題である可能性があることを認識しています。したがって、提案がない場合は、独自の HtmlUnit 使用のテスト実装を通じてこれら 2 つのサイトをポンピングし、基本的な出力を取得できるかどうかを確認してください。 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);

}

}

ありがとう!

4

3 に答える 3

3

これを追加してみてください:

client.setThrowExceptionOnScriptError( false ) ;

実行には長い時間がかかり、少年はログを吐き出します...しかし、最終的にページが出てきました:

htmlpage init'd
<?xml version="1.0" encoding="utf-8"?>
<html id="">
  <head>
   ...
于 2010-07-16T18:56:57.567 に答える
2

「この操作を完了するために必要なデータがまだ利用できない」という問題もありました。
ユーザーエージェントを「Firefox」に切り替えると役立ちました...
http://steveliles.github.com/jquery_htmlunit_runtimeerror_messages_galore.html

于 2012-07-17T08:53:22.840 に答える
2

ブラウザーは、エラーとして検出されるものに対して高い耐性を持っています (Javascript だけでなく、HTML、css などでも)。これは、Javascript がどのように実装されたかというさまざまな「標準」が矛盾していることが原因の 1 つです。あるブラウザでは問題ないように見えても、別のブラウザでは問題が発生します。したがって、これらすべてのメッセージが表示されると、少し当惑するはずです。

これを概観するには、Internet Explorer で設定に移動し、[詳細設定] で [スクリプト エラーごとに通知を表示する] をオンにしてから、同じサイトを参照します。IE が問題として検出したものを無視するだけで、IE が取得するコードの量に驚くかもしれません。

さまざまなブラウザーで HtmlUnit を使用すると、これらの競合の一部が明らかになります。

HtmlUnit に「このブラウザでは無視...」のようなことをするように指示することは、完全に有効な方法です。私の場合、すべてのユーザーが Internet Explorer を使用していることを確認するサイトからデータを取り込んでいるため (いいえ、なぜそうしているのかよくわかりません)、javascript エラーを無視せずに先に進むことはできません。興味深いことに、IE は Javascript エラーがたくさんあると認識していても、サイトは問題なく動作します。

于 2014-06-04T14:16:39.647 に答える