0

我想通过 Java 编程语言访问 HTMl 页面上的表单,而不涉及真正的浏览器。

目前我正在通过HTML UNIT执行此操作,但加载页面需要更多时间。在访问数百万页时,这个额外的时间是最重要的。

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

4

3 回答 3

2

我以前使用过类似的东西,称为httpunit,但我不知道它如何比较性能。

如果您有数百万页要处理,我建议您在其中添加更多线程。只是一个猜测,但我认为如果你将其扩展到多个线程,你会在耗尽 CPU 能力之前耗尽带宽(在这种情况下,它可能有多快并不重要)

于 2010-01-05T19:03:58.600 回答
0

使用浏览器访问网页,甚至是 HtmlUnit,都会很慢。更好的方法是测试 Web 界面正下方的层,这样您就不需要访问数百万个页面 - 相反,您需要进行足够的测试以确保 Web 界面正确使用较低的层。

于 2010-01-05T19:00:55.037 回答
0

浏览器中的大部分交互都归结为 HTTP GET 或 HTTP POST。您需要准确地确定您需要的操作,然后您可以构建 URL 和/或表单数据。然后你可以使用这样的东西:

   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) { } 
于 2010-01-05T19:02:59.180 回答