2011-06-23 185 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