2011-06-23 8 views
2

私はwebsiteから検索結果をダウンロードしています。これは、最初のページに適したjavaを使用しています。JavaからJavascriptを呼び出す

URL url = new URL(
     "http://www.geocaching.com/seek/nearest.aspx?country_id=79&as=1&ex=0"); 
BufferedReader in = new BufferedReader(new InputStreamReader(
     url.openStream())); 

String line; 
while ((line = in.readLine()) != null) { 
    System.out.println(line); 
} 
in.close(); 

しかし、どのように結果の2ページ目を取得できますか? 2番目のページへのリンクは、この関数を呼び出すJavaScriptのコールjavascript:__doPostBack('ctl00$ContentBody$pgrBottom$lbGoToPage_2','')、使用しています:私は考えて

<script type="text/javascript"> 
//<![CDATA[ 
var theForm = document.forms['aspnetForm']; 
if (!theForm) { 
    theForm = document.aspnetForm; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
//]]> 
</script> 

を、私は2ページ目を得るために、私のJavaプログラムの開発から機能を呼び出す必要があるが、どのように?パッケージ内

答えて

1

それはブラウザ内で実行するWebページにあったかのように私はあなたが__doPostBack(...)を実行したい伝えることができるものから、 。私はあなたがJavaを使ってプログラムでそれをどうやってやることができるかわかりません。私があなたの場合は、JavaScriptを呼び出すポストリクエストを手作業で作成します(おそらくthisのようなものを使用しています)。私はそれが理想的ではないことを知っています。なぜなら、ページが変更されると、アプリケーションはもう動作しませんが、私が考えることができる唯一の合理的なソリューションだからです。

達成しようとしていることを正確に尋ねることはできますか? Seleniumのようなものが役立つでしょうか?

+0

後で処理するためにすべてのデータをダウンロードしようとしています。セレンは助けないと思う。 – multiholle

+0

@multiholle Seleniumを使って興味のあるページを歩き、別の時間に処理できるファイルに各ページの関連コンテンツを保存することができます。 –

+0

@multiholleおそらく、手動で投稿する必要があります。私が言及したリンクをチェックしてください。 – toc777

1

チェックアウトjavax.script.ScriptEnginejavax.script.ScriptEngineManagerをし、他のもの:

ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptEngine engine = manager.getEngineByName("js"); 
engine.eval(...); 
+0

これはJavaのJavaScriptコードを評価するのに最適ですが、どのようにしてWebサイトに接続しますか?関数 '__doPostBack(...)'は、ウェブサイトのコンテキストでのみ動作します。 – multiholle

+0

@multiholle 'theForm.submit();'で何が呼び出されているのかを確認する必要があります。たぶんjavaスクリプトを実行する必要はありません。 – Thresh

関連する問題