从Java调用Javascript

从Java调用Javascript,java,javascript,url,web,download,Java,Javascript,Url,Web,Download,我正在从一个使用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

我正在从一个使用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:\uu doPostBack('ctl00$ContentBody$pgrbotom$lbGoToPage\u2','')
,该调用调用此函数:

<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程序中调用函数来获取第二个页面,但是如何呢?

查看
javax.script.ScriptEngine
javax.script.ScriptEngineManager
以及包中的其他内容:

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

我可以告诉你,你想要执行uu doPostBack(…),就好像它在浏览器中的网页上执行一样。我不明白如何使用Java以编程方式实现这一点。如果我是你,我会尝试手动创建Javascript正在调用的post请求(可能使用类似的方式)。我知道这并不理想,因为如果页面发生变化,你的应用程序将无法继续工作,但这是我能想到的唯一合理的解决方案


我能问一下你到底想达到什么目的吗?需要帮助吗?

尝试使用直接Web远程处理(DWR)。该引擎支持从JavaScript调用java方法,反之亦然。在

上查找更多信息这对于评估java中的javascript代码非常有用,但是如何获得与网站的连接呢。函数
\uu doPostBack(…)
仅在网站上下文中起作用。@multiholle您应该检查表单.submit()中的调用内容。也许您根本不需要运行java脚本。我正在尝试下载所有数据以供以后处理。我认为Selenium不会有帮助。@multiholle您可以使用Selenium浏览您感兴趣的页面,并将每个页面的相关内容保存到一个文件中,然后在另一个时间处理。@multiholle您可能应该手动完成这篇文章。查看我提到的链接。如何获取我必须发送的帖子内容?你必须扫描页面并硬编码任何需要添加的论坛变量。显然,这是一种非常脆弱的方法,但无论如何,您试图做的事情本质上是脆弱的。我想最可靠的方法是按照克里斯·奈特的建议去做,但这会增加很多复杂性。