从Java调用Javascript
我正在从一个使用java的网站下载一个搜索结果,它在第一页非常有用从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
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您可能应该手动完成这篇文章。查看我提到的链接。如何获取我必须发送的帖子内容?你必须扫描页面并硬编码任何需要添加的论坛变量。显然,这是一种非常脆弱的方法,但无论如何,您试图做的事情本质上是脆弱的。我想最可靠的方法是按照克里斯·奈特的建议去做,但这会增加很多复杂性。