2010-01-05 61 views
0

我想通过Java编程语言访问HTMl页面上的表单,而不涉及真正的浏览器。如何通过java点击一个按钮?

目前我通过HTML UNIT这样做,但它需要多一点的时间来加载一个页面。当涉及访问数百万页时,这个额外的位时间最重要。

有没有其他方法可以做到这一点?

+0

你到底在问什么?我以为我明白了,但基于其他答案,也许我没有。 – 2010-01-05 19:04:12

回答

2

我用类似的东西之前调用httpunit,但我不知道它是如何明智的比较性能。

如果你有几百万个页面需要处理,我会建议在它上面添加更多的线程。只是一个猜测,但我认为如果将这个扩展到多个线程,在耗尽CPU功耗之前会耗尽带宽(在这种情况下,它可能会快得多)

0

使用浏览器访问网页甚至HtmlUnit的速度会很慢。更好的方法是test the layer just below the web interface,这样就不需要访问数百万个页面 - 而是测试足够多的内容以确保Web界面正确使用较低层。

0

浏览器中的大部分交互归结为HTTP GET或HTTP POST。 你需要弄清楚你需要的操作,然后你可以构造URL和/或表单数据。 Then you can use something like this:

try { 
    //Construct data 
    String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); 
    // Send data 
    URL url = new URL("http://hostname:80/cgi"); 
    URLConnection conn = url.openConnection(); conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    wr.flush(); 

    // Get the response 
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line; while ((line = rd.readLine()) != null) { 

    // Process line... } 
    wr.close(); 
    rd.close(); 
    } catch (Exception e) { }