2011-09-07 16 views
5

Estoy leyendo desde una url en mi código java pero la página que quiero leer ejecuta un comando cuando se carga y el InputStreamReader lee la página antes de que se haya cargado completamente. así que mi lector con búfer solo recopila el código HTML en la página antes de que se cargue el contenido real.Espere hasta que la página se cargue antes de leer los contenidos de una URL en Java

Mi objetivo principal es encontrar la palabra "ventas" en la página, pero no puedo hacer esto si la ruta abierta está conectada antes de que se cargue la página completa. ¿Hay alguna manera de esperar a que se cargue o algo así?

Aquí está mi código:

URL url = new URL("http://urlgoeshere.com?"+ withAParam); 
     URLConnection uc = url.openConnection(); 
     uc.connect(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); 
     String inputLine = in.readLine(); 
     int index = -1;    
     while ((inputLine = in.readLine()) != null){ 
      index=inputLine.toLowerCase().indexOf("sales"); 
      if(index>=0){ 
      log.info("Found sales!"); 
       break;     
      } 
     } 
     if (in != null){ 
      in.close(); 
     } 
+0

Esto no tiene sentido. El 'BufferedReader' leerá la página secuencialmente hasta que la transmisión no tenga más contenido. Cualquier cosa que la página escriba será leída. Si la página es dinámica, aún recogerá los contenidos. Si las acciones posteriores a la carga se realizan en JavaScript, este enfoque nunca funcionará porque no se ejecutará o incluso buscará el javascript. – jiggy

Respuesta

1

Ahora primeros algunos consejos de codificación Java que no va a resolver su problema, entonces una punta que puede.

Debe volver a configurar su código y usar try-finally donde cierra la secuencia en bloque finalmente para asegurarse de que siempre se cierra incluso cuando se produce una excepción. Entonces no usaría el indexOf con un int. Para que el código sea más nítido, legible y menos detallado, escriba if(inputLine.toLowerCase().contains("sales")){ directamente en su sentencia if y elimine todo el código de índice.

Puede probar la API de Apache http://hc.apache.org/httpcomponents-client-ga/index.html para ir a la página de inicio.

+0

¡Gracias por los consejos! Sin embargo, investigué los componentes http de Apache y, aunque podía obtener datos como antes, obtenía el mismo enfoque de url openstream original: solo cargaba parte de la página. Utilicé la fuente de: http://hc.apache.org/httpclient-3.x/tutorial.html. Hmmm ... – Chris

Cuestiones relacionadas