Gestern habe ich das Abrufen von Daten in Java gepostet. Ich frage mich, ob es möglich ist, ein Java-Programm auszuführen, während ein Webbrowser geöffnet ist und dann auf einer Website etwas zu tun. Wenn ich Facebook in einem Browser geöffnet habe, könnte es die aktuelle Uhrzeit im Statusfeld eingeben und dann auf "Posten" klicken? Oder sagen wir, ich mache das Programm in der Lage, Eingaben vom Benutzer entgegenzunehmen (vielleicht mit Scanner?) und dann basierend auf der Eingabe Google laden, sie in die Suchleiste eingeben und dann auf "Suchen" klicken.
Antwort
Zu viele Anzeigen?
PrimosK
Punkte
13635
Sie können dies tun, indem Sie Selenium verwenden:
Selenium automatisiert Browser. Das ist alles. Was Sie mit dieser Power machen, liegt ganz bei Ihnen. Hauptsächlich dient es der Automatisierung von Webanwendungen zu Testzwecken, aber es ist sicherlich nicht nur darauf beschränkt. Auch langweilige webbasierte Verwaltungsaufgaben können (und sollten!) automatisiert werden.
Dies ist ein Beispiel von der Dokumentationsseite, die nach dem Begriff "Käse" auf Google sucht:
paket org.openqa.selenium.beispiel;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Selenium2Beispiel {
public static void main(String[] args) {
// Erstelle eine neue Instanz des Firefox-Treibers
// Beachten Sie, dass der Rest des Codes auf der Schnittstelle basiert,
// nicht auf der Implementierung.
WebDriver treiber = new FirefoxDriver();
// Und jetzt verwenden Sie dies, um Google zu besuchen
treiber.get("http://www.google.com");
// Alternativ kann dasselbe auch so gemacht werden
// treiber.navigate().to("http://www.google.com");
// Finde das Texteingabeelement nach seinem Namen
WebElement element = treiber.findElement(By.name("q"));
// Geben Sie etwas ein, nach dem gesucht werden soll
element.sendKeys("Käse!");
// Jetzt das Formular absenden. Der WebDriver findet das Formular für uns aus dem Element
element.submit();
// Überprüfen des Titels der Seite
System.out.println("Seitentitel ist: " + treiber.getTitle());
// Die Google-Suche wird dynamisch mit JavaScript gerendert.
// Warten Sie, bis die Seite geladen ist, Timeout nach 10 Sekunden
(new WebDriverWait(treiber, 10)).until(new ExpectedCondition() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("käse!");
}
});
// Sollte sehen: "Käse! - Google Suche"
System.out.println("Seitentitel ist: " + treiber.getTitle());
// Browser schließen
treiber.quit();
}
}