【问题标题】:Call Javascript from Java从 Java 调用 Javascript
【发布时间】:2011-06-23 08:55:46
【问题描述】:

我正在使用 java 从website 下载搜索结果,该搜索结果非常适合第一页。

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

【问题讨论】:

    标签: java javascript url web download


    【解决方案1】:

    据我所知,您希望像在浏览器中执行的网页上一样执行 __doPostBack(...)。我看不出您如何使用 Java 以编程方式做到这一点。如果我是你,我会尝试手动创建 Javascript 正在调用的发布请求(可能使用类似 this 的东西)。我知道这并不理想,因为如果页面发生更改,您的应用程序将无法再工作,但这是我能想到的唯一合理的解决方案。

    我能问一下你到底想达到什么目标吗?像Selenium 这样的东西有帮助吗?

    【讨论】:

    • 我正在尝试下载所有数据以供以后处理。我认为 Selenium 无济于事。
    • @multiholle 您可以使用 Selenium 浏览您感兴趣的页面,并将每个页面的相关内容保存到一个文件中,然后可以在其他时间处理。
    • @multiholle 那时您可能应该手动发帖。查看我提到的链接。
    • 如何获取我要发送的帖子内容?
    • 您将不得不扫描页面并硬编码任何需要添加的论坛变量。显然,这是一种极其脆弱的方法,但无论如何你试图做的事情本质上是脆弱的。我想最稳健的方法是按照 Chris Knight 的建议去做,但这会增加很多复杂性。
    【解决方案2】:

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

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

    【讨论】:

    • 这非常适合在 java 中评估 javascript 代码,但我如何获得与网站的连接。 __doPostBack(...) 函数仅在网站上下文中有效。
    • @multiholle 您应该检查theForm.submit(); 中调用的内容。也许你根本不需要运行 java 脚本。
    【解决方案3】:

    尝试使用直接 Web 远程处理 (DWR)。该引擎支持从 JavaScript 调用 java 方法,反之亦然。在http://directwebremoting.org/dwr/index.html查找更多信息

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 2016-03-26
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多