2011-01-09 29 views
6

Ich habe ein Programm, das Daten aus einer Excel-Datei nimmt und für den Benutzer manipuliert. Um jedoch Updates für die Excel-Datei zu erhalten, müssen sie von einer Website heruntergeladen werden. Ich habe ursprünglich versucht, mithilfe der Roboterklasse zur Website zu navigieren, mich mit Benutzernamen und Passwort einzuloggen, dann zum richtigen Bereich der Website zu navigieren und den Button "Excel-Tabelle herunterladen" zu finden und darauf zu klicken. Aber ich verstehe, dass es eine schreckliche Art ist, es zu tun, und es funktioniert nicht immer. Was ist ein besserer Weg, ich kann dies tun, so dass mein Programm auf die Website gehen und zu der gewünschten Seite navigieren und dann die Daten herunterladen kann. Ich habe über 'Seitenverschrottung' gelesen, aber ich glaube nicht, dass ich das tun würde. Ich möchte wirklich mit der Webseite interagieren, nicht so sehr den Inhalt herunterladen. Jede Hilfe wäre großartig. Danke, PeterWie Java-Anwendung mit einer Website interagieren

+0

Ist die Website eine API zur Verfügung stellen Sie anstelle von verwenden können sie durch einen Submit-Button zu bekommen. –

Antwort

12

Wenn Sie tatsächlich mit interagieren müssen Die Website dann selen/webdriver ist perfekt für Ihre Bedürfnisse:

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

Beispiel Google-Suche:

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

Würde es einen Weg geben, dies zu erreichen, OHNE dem Benutzer zu zeigen, was vor sich geht? Wie im Browser würde sich das nie öffnen aber alles würde immer noch hinter den Kulissen erledigt werden? – Ethan

+0

Verwenden Sie unbedingt einen kopflosen Browser wie PhantomJS oder starten Sie einen Browser im Headless-Modus – Pablojim

0

Sie könnten HTTP-Anfragen verwenden, um die Datei herunterzuladen, wenn Sie die URL kennen. Eine schnelle Google fand diese: http://download.oracle.com/javase/tutorial/networking/urls/readingWriting.html die Datei herunterladen und

+0

Danke, ich habe den Link für die Zukunft gespeichert, aber der Link, den ich herunterladen muss, hat keine direkte URL, zu der ich gelangen kann, ohne mich zuerst auf der Website einzuloggen. Also brauche ich mehr eine Möglichkeit, mit der Website zu interagieren, so dass ich mich anmelden und auf den Link – Peter

+0

kann die Website bietet jede Art von API dafür, dies zu tun? Wenn nicht, ist Scraping wirklich Ihre einzige Option, abgesehen davon, dass Sie Ihre Roboterlösung verwenden (was, wie Sie sagen, ziemlich schrecklich ist) –

Verwandte Themen