模拟网页中的用户点击[JAVA]

时间:2014-03-12 10:41:20

标签: java

我目前正致力于使用Java获取特定网页的源代码。

网页为:http://www.studenti.ict.uniba.it/esse3/ListaAppelliOfferta.do

我写了一些代码来做到这一点:

 try{
      URL url= new URL("http://www.studenti.ict.uniba.it/esse3/ListaAppelliOfferta.do");
      URLConnection urlConn = url.openConnection();
      BufferedReader dis= new BufferedReader(new InputStreamReader((url.openStream())));
      String s="";
      while (( s=dis.readLine())!= null) {
      System.out.println(s);
      }
      dis.close();
      }catch (MalformedURLException mue) {}
      catch (IOException ioe) {}

}

这很好用。

问题是我想“模拟”用户在Facoltà中选择“[1020] Dipartimento di Informatica”和Corso di Studio中的“[1102] Informatica e Tecnologie per la produzione del Software”,然后用户点击“ Avvia Ricerca“开始搜索并显示包含结果的表格。

目标是获取网页的源代码,其中还包含我需要的表格中的信息。

我注意到,如果我手动执行这些选择然后单击“Avvia Ricerca”开始搜索,则会再次加载网页,显示我需要的表格中的数据,但URL不会更改。

因此,即使页面现在显示我需要的数据,在使用我的代码时,我只能获取页面的源代码,因为它是在进行选择和搜索之前。

3 个答案:

答案 0 :(得分:2)

之前我已经使用HTMLUnit(http://htmlunit.sourceforge.net)完成了类似的工作,非常适合模拟网站上的任何内容以及进行抓取。

答案 1 :(得分:0)

我建议在Web调试器(Ctrl-Shift-I)中打开页面,看看在做出选择时提取的URL,然后在Java应用程序中编程这些提取。 这种方法的缺点是,如果页面实现发生变化,您的代码将会中断。

另一种方法是在浏览器沙箱中运行页面Javascript。这也容易出错,甚至可能不安全。

答案 2 :(得分:0)

Normaly,您可以通过GET / POST发送此信息(例如使用url?department = xy),但在您的情况下它非常复杂,因为该站点使用JSF并生成ID(以及信息,哪个部门)被选中,写在那里,例如" http://www.studenti.ict.uniba.it/esse3/ListaAppelliOfferta.do;jsessionid=365EB9843B2872E73067693A6095BA35")。

根据您的目的,您可以使用Selenium(http://docs.seleniumhq.org/)。这将模拟浏览器,您可以获取元素(例如,按名称显示部门:fac_id),并设置值(例如,在创建select元素后使用selectByValue,在此处记录:http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/Select.html)。

如果您需要在不使用Selenium的情况下执行此操作(例如,因为您只需要在命令行上执行此操作而不使用浏览器本身),您可以尝试停用Cookie,然后参数应该在GET或POST中发送 - 参数,你可以检查一下,例如与Firebug。但那就是更难的解决方案,Selenium会更容易使用。