Вызов Javascript из Java - PullRequest
       13

Вызов Javascript из Java

2 голосов
/ 23 июня 2011

Я загружаю результаты поиска с веб-сайта , используя 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-программы, чтобы получить вторую страницу, но как?

Ответы [ 3 ]

1 голос
/ 23 июня 2011

Из того, что я могу сказать, вы хотите выполнить __doPostBack (...), как если бы это было на веб-странице, выполняющейся в браузере.Я не вижу, как вы могли бы сделать это программно, используя Java.На вашем месте я бы попытался вручную создать почтовый запрос, который вызывает Javascript (возможно, используя что-то вроде this ).Я знаю, что это не идеально, потому что если страница меняет ваше приложение, оно больше не будет работать, но это единственное разумное решение, о котором я могу подумать.

Могу ли я спросить, чего именно вы пытаетесь достичь?Поможет ли что-то вроде Selenium ?

1 голос
/ 24 июня 2011

Попробуйте использовать Direct Web Remoting (DWR).Этот движок поддерживает вызов методов Java из JavaScript и наоборот.Найти больше информации на http://directwebremoting.org/dwr/index.html

1 голос
/ 23 июня 2011

проверить javax.script.ScriptEngine и javax.script.ScriptEngineManager и другие вещи в пакете:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.eval(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...