2010-01-05 20 views
0

Je veux accéder à des formulaires sur des pages HTMl à travers le langage de programmation Java sans impliquer de véritable navigateur entre les deux.comment cliquer sur un bouton via java?

À l'heure actuelle, je le fais par HTML UNIT mais il faut un peu plus de temps pour charger une page. Quand il s'agit d'accéder à des millions de pages, ce temps supplémentaire est le plus important.

Existe-t-il d'autres méthodes pour cela?

+0

Que demandez-vous exactement? Je pensais avoir compris, mais sur la base des autres réponses, peut-être que je ne l'ai pas fait. –

Répondre

2

J'ai utilisé quelque chose de similaire appelé httpunit avant, mais je ne sais pas comment il se compare sage performance.

Si vous avez des millions de pages à traiter, je vous recommande d'y ajouter quelques threads. Juste une supposition, mais je pense que si vous mettez à l'échelle de plusieurs threads, vous manquerez de bande passante avant de manquer de puissance CPU (dans ce cas, peu importe combien il peut être plus rapide)

0

Accès à une page Web en utilisant un navigateur, même HtmlUnit, va être lent. Une meilleure méthode consiste à test the layer just below the web interface, de sorte que vous n'ayez pas besoin d'accéder à des millions de pages. Au lieu de cela, vous tester suffisamment pour vous assurer que l'interface Web utilise correctement la couche inférieure.

0

La plupart des interactions dans le navigateur se résument à un HTTP GET ou à un HTTP POST. Vous devez déterminer exactement l'opération dont vous avez besoin, puis vous pouvez construire l'URL et/ou les données de formulaire. 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) { }