cómo hacer clic en un botón a través de Java?
-
18-09-2019 - |
Pregunta
Quiero tener acceso a formularios de las páginas HTML throught lenguaje de programación Java sin la participación de navegador real en el medio.
En la actualidad lo estoy haciendo a través HTML UNIDAD pero se necesita un poco más de tiempo para cargar una página . Cuando se trata de acceder a millones de página, este tiempo extra más importa.
¿Hay otros métodos para hacer esto?
Solución
He utilizado algo similar llamado HttpUnit antes, pero no tengo ni idea de cómo se compara el rendimiento sabia .
Si usted tiene millones de páginas a procesar, recomendaría tirar algunos más hilos en ella. Sólo una suposición, pero creo que si se cambia la escala esto a múltiples hilos, que se quedará sin ancho de banda antes de ejecutar fuera de energía de la CPU (en cuyo caso no importa cuánto más rápido podría ser)
Otros consejos
Acceso a una página web usando un navegador, incluso HtmlUnit, va a ser lento. Un método mejor es la capa justo por debajo de la interfaz web , de modo que no es necesario para acceder a millones de páginas -. en lugar de probar lo suficiente como para asegurarse de que la interfaz web está utilizando la capa inferior correctamente
La mayor parte de la interacción en el navegador se reduce a un HTTP GET o HTTP POST. Es necesario averiguar exactamente la operación que necesita, y entonces se puede construir los datos de URL y / o forma. A continuación, puede usar algo como esto:
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) { }