2011-06-23 220 views
2

我正在從使用java的website下載搜索結果,適用於第一頁使用。從Java撥打Java的電話號碼

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(); 

但是我怎麼能得到結果的第二頁?到第二頁的鏈接使用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> 

我想,我需要從我的Java PROGRAMM調用該函數來獲取第二頁,但如何?

回答

1

從我可以告訴你要執行__doPostBack(...),就好像它是在瀏覽器中運行的網頁上。我看不出你如何用Java編程。如果我是你,我會嘗試手動創建Javascript調用的發佈請求(可能使用類似this的東西)。我知道它並不理想,因爲如果頁面改變你的應用程序不再工作,但它是我能想到的唯一合理的解決方案。

我可以問你到底想要達到什麼目的嗎?會像Selenium幫助嗎?

+0

我正在嘗試下載所有數據以供日後處理。我認爲Selenium不會幫助。 – 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代碼非常適用,但是如何獲得與網站的連接。函數'__doPostBack(...)'只能在網站上下文中使用。 – multiholle

+0

@multiholle您應該檢查'theForm.submit();'中調用的內容。也許你不需要運行java腳本。 – Thresh