2011-01-09 12 views
6

Tengo un programa que toma datos de un archivo Excel y los manipula para el usuario. Pero para obtener actualizaciones del archivo Excel, deben descargarse de un sitio web. Originalmente intenté usar la clase de robot para navegar al sitio web, iniciar sesión con nombre de usuario y contraseña, luego navegar a la sección correcta del sitio web y encontrar el botón que dice "descargar hoja de cálculo Excel" y hacer clic en él. Pero entiendo que es una forma horrible de hacerlo y que no siempre funciona. ¿Cuál es la mejor manera de hacerlo para que mi programa pueda ir al sitio web y navegar a la página que quiero y luego descargar los datos? Leí sobre 'eliminación de páginas', pero no creo que eso me permita hacerlo. Realmente quiero interactuar con la página web y no tanto descargar el contenido de la misma. Cualquier ayuda sería genial. Gracias, PeterCómo hacer que la aplicación Java interactúe con un sitio web

+0

¿El sitio web proporciona una API que puede utilizar en lugar de tener que hacerlo a través de un botón de enviar. –

Respuesta

12

Si realmente se necesita para interactuar con el sitio web luego selenio/webdriver es perfecto para sus necesidades:

http://code.google.com/p/selenium/wiki/GettingStarted

Muestra de búsqueda de Google:

package org.openqa.selenium.example; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.htmlunit.HtmlUnitDriver; 

public class Example { 
    public static void main(String[] args) { 
     // Create a new instance of the html unit driver 
     // Notice that the remainder of the code relies on the interface, 
     // not the implementation. 
     WebDriver driver = new HtmlUnitDriver(); 

     // And now use this to visit Google 
     driver.get("http://www.google.com"); 

     // Find the text input element by its name 
     WebElement element = driver.findElement(By.name("q")); 

     // Enter something to search for 
     element.sendKeys("Cheese!"); 

     // Now submit the form. WebDriver will find the form for us from the element 
     element.submit(); 

     // Check the title of the page 
     System.out.println("Page title is: " + driver.getTitle()); 
    } 
} 
+0

¿Habría una manera de lograr esto SIN mostrarle al usuario lo que está pasando? Como en el navegador nunca se abriría, pero todo se haría aún detrás de las escenas? – Ethan

+0

Seguro, utilice un navegador sin cabeza como PhantomJS o inicie un navegador en modo sin cabeza – Pablojim

0

Puede utilizar las solicitudes http para descargar el archivo si conoce la URL. Google rápido encontró esto: http://download.oracle.com/javase/tutorial/networking/urls/readingWriting.html descargue el archivo y guárdelo en el disco

+0

Gracias, guardé el enlace para el futuro, pero el enlace que necesito descargar no tiene una URL directa a la que pueda acceder sin iniciar sesión en el sitio web. Entonces necesito más formas de interactuar con el sitio web para poder iniciar sesión y acceder al enlace – Peter

+0

¿El sitio web en cuestión ofrece algún tipo de API para hacer esto? De lo contrario, raspar es realmente su única opción, aparte de usar su solución de robot (que, como usted dice, es bastante horrible :) –

Cuestiones relacionadas