Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在网页中模拟用户点击[JAVA]_Java - Fatal编程技术网

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

在网页中模拟用户点击[JAVA],java,Java,我目前正在使用Java获取文件中特定网页的源代码 网页为: 为此,我编写了一些代码: try{ URL url= new URL("http://www.studenti.ict.uniba.it/esse3/ListaAppelliOfferta.do"); URLConnection urlConn = url.openConnection(); BufferedReader dis= new BufferedReader(new InputStream

我目前正在使用Java获取文件中特定网页的源代码

网页为:

为此,我编写了一些代码:

 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]Dipartmento di Informatica”和在Corso di Studio中选择“[1102]Informatica e Tecnologie per la produzione del Software”,然后用户点击“Avvia Ricerca”,开始搜索并显示一个包含结果的表格

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

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


因此,即使页面现在显示了我需要的数据,当使用我的代码时,我只能获得页面的源代码,就像在进行选择和搜索之前一样。

我以前用HTMLUnit()做过类似的事情,可以很好地模拟与网站有关的任何事情,和用于抓取。

我建议在web调试器(Ctrl-Shift-I)中打开页面,查看在进行选择时提取的URL,然后在Java应用程序中对这些提取进行编程。 这种方法的缺点是,如果页面实现发生更改,代码就会中断


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

通常,您可以通过GET/POST(例如使用url?department=xy)发送此信息,但在您的情况下,它相当复杂,因为站点使用JSF并生成ID(并且选择哪个部门的信息写入其中,例如“”)

根据需要,您可以使用Selenium()。这模拟了浏览器,您可以获取您的元素(例如,部门名称:fac_id),并设置值(例如,在创建select元素后使用selectByValue,记录在此处:)


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

您考虑过使用库吗?例如,提供了一种很好的方法来完成您计划要做的事情。HtmlUnit()也是一个选项。我的目标是获得整个网页的源代码,包括我最需要的结果表。我将使用XPath获取其中的信息并保存到csv文件中