Frage von BenStudio, 65

Kann man mit Java Websiten "bedienen"?

Wieder mal eine Java-Frage: Kann man mit Java auf eine Website zugreifen und dort dann iwie zB. Buttons drücken oder Texteingaben machen? Falls meine Frage nicht klar genug ist ein Beispiel: Ich will auf einer Website sagen wir Youtube unter einem bestimmten Video ein Kommentar schreiben (angenommen man müsse sich nicht einloggen). Kann ich dann Java den Text, den ich als Kommentar abgeben will, automatisch eingeben und dann auf senden drücken lassen? Wenn ja, wie, bzw. wo gibt es dazu Tutorials? Wenn nein, wie würde so etwas gehen, bzw. mit welcher Sprache?

Danke im Vorraus :)

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von KnusperPudding, Community-Experte für Java, 12

Ja, es gibt diese Möglichkeit.

Hier gibt es z.B. das Selenium-Projekt, was ich nutze. 

Was dein Konkretes Beispiel betrifft: Das ist möglich.

(angenommen man müsse sich nicht einloggen)

Selbst einloggen wäre möglich.

Kann ich dann Java den Text, den ich als Kommentar abgeben will, automatisch eingeben und dann auf senden drücken lassen?

Ja.

Wenn ja, wie, bzw. wo gibt es dazu Tutorials? 

Siehe hier - Die Projektseite: http://www.seleniumhq.org/ - Tutorials bzw. Informationen zur Anwendung findest du in der Documentation.

Ich habe damit bereits einige Automatismen mit gemacht. Ist wirklich sehr leicht.

Um Diverse Stellen auf einer Website zu finden, gebe ich dir vorab den Tipp: Verwende zur Ermittlung des Feldnamens den XPath

Welcher wie folgt aussieht:

//*[@id="fAnswer"]/div[2]/div/div/div[1]/ul/li/a

Um den XPath eines Elements zu bekommen, drücke im Chrome einfach auf das Element per Recht Maustaste, dann " Element untersuchen". Im HTML-Code rechte Maustaste: "Copy XPath".

Damit könnte eine Steuerung z.B. so aussehen:

webDriver.findElement(
By.xpath(
"//div[*/text()='Credit Card']/descendant::input[@id='cardNumber']"
)
).sendKeys("1234123412341234");

Sofern du nicht den Selenium-Standard-Browser-Driver verwendest, nim dessen Chrome/Firefox implementation. Dadurch sieht du dann sogar die einzelnen Schritte in einem separaten Browserfenster. - Sofern es hier noch weitere Fragen gibt, bitte einfach fragen.

Antwort
von phigeek, 22

Ja, das geht.

Ich mache das oft mit den Wetterdaten, die ich mit Java (manchmal auch PHP) von einer Webseite abziehe und auf einer anderen Webseite platziere.

Du musst nur damit rechnen, dass die Seite irgendwann anders aussieht. Wenn nämlich das Layout der Webseite die du "anzapfst" sich verändert, dann stimmen die URLs, die Eingabefelder und die Buttons oft nicht mehr, und Du musst Dein Programm anpassen.

So wie ich Dich verstehe, willst Du auf einer Seite einen Text "posten". Wenn die Seite frei (also ohne Login) zugänglich ist, dann ist das kein Problem. Es wird auch oft illegal von Spammern ausgenutzt, um in Foren Werbebeiträge hineinzuschmuggeln.

Am einfachsten analysierst Du das <form>-Tag, das die Daten via "submit" übermittelt (HTML-Quelltext und Transport z. B. mit Wireshark analysieren). Diese Übermittlung kannst Du dann mit dem POST oder GET Protokoll (aus HTTP) simulieren und an Deinen Server absetzten. Werden die Daten via AJAX/XML/Javascript von der Webseite irgendwie aufbereitet vor dem Übermitteln, ist das zwar immer noch möglich, jedoch ungleich schwieriger. Ebenso (Du erwähnst es selbst) schwierig ist es, wenn ein Login verlangt wird, denn dann muss sich Dein Programm zuerst in Deinem Namen am Server anmelden. Auch hier ändern sich die Login Prozeduren aber oft etwas ab, sodass Du Dein Programm jedes Mal — wenn der Anbieter auf dem Server etwas umbenennt — wieder anpassen musst.

Pass aber auch auf, was Limearts bereits erwähnt hat: Bewege Dich stets auf dem Pfad des Legalen. Ich habe die Wetterdaten erwähnt, die ich anzapfe und auf einer anderen Seite platziere: Dies wäre illegal, wenn die Zielseite nicht eine Firmen-Interne Seite wäre, auf die lediglich unsere Mitarbeiter Zugriff haben, sobald ich diese Daten dann auf einer öffentlich zugänglichen Webseite anbringe, mache ich mich strafbar.

Kommentar von BenStudio ,

Okey, vielen Dank. Das ganze geht auch mir Java oder? Und wenn ja welche java.* Bibliothek brauche ich dafür, damir ich zumindest weiß wo ich nach den Methoden suchen muss.

Kommentar von phigeek ,

Ich verwende die Klassen Socket (bzw. wenn mein Programm als Server fungiert: ServerSocket). Um in bestehenden Seiten nach Inhalten zu suchen, verwende ich Regular Expressions (RegEx), ganz einfach in der String-Klasse.

Einen HTTP-Header kannst Du ganz einfach erstellen, denn das sind einfach nur lesbare Strings. Der Header endet immer mit einer Leerzeile, bevor dann der Inhalt der Anfrage bzw. Antwort mitgegeben wird. Mit anderen Worten, bis auf die Socket-Verbindung zum Server sind alles andere einfache String-Operationen. Das ist ja auch das Schöne am HTTP: Der ganze Header ist in ASCII für uns bestens verständlich.

Um mehr zu helfen, müsste ich die Frage ganz konkret kennen: Welche Webseite, welches Formular und welche Daten sollten da mitgegeben werden.

Antwort
von Limearts, 31

Generell: Nein, nicht möglich bzw im Versuch schon im Bereich des Strafbaren.

Eine Erweiterung für Webseiten zu schreiben und so selbstständig angepasste Funktionen oder dergleichen zu nutzen ist technisch auf dem Papier zwar möglich, scheitert aber an einem ganz entscheidenden Faktor:

Die Daten werden bei Websites in Datenbanken oder zumindest entsprechend zugangsgesicherten Bereichen gesichert auf die Dritte keinen Zugriff haben und auch nicht haben dürfen.

Wenige Ausnahmen sind APIs, in denen Entwickler bereits bestimmte Schnittstellen frei gegeben haben.

Aber auch hier hat die Manipulation klare Grenzen. Denn wärst Du in der Lage mal eben so über eine eigene Funktion Datensätze hinzuzufügen, wärst Du in der Regel technisch auch in der Lage Datensätze auszulesen oder zu verändern. Das hätte zur Folge dass fremde Beiträge oder ganze Benutzerkonten manipuliert und verändert würden. Und Du kannst Dir sicher leicht vorstellen: Es würde nicht lange dauern bis schwarze Schafe dies nutzen würden um Unruhe oder ernsthafte Probleme herauf zu beschwören.

Kommentar von BenStudio ,

Ich habe ja nicht vor die Datenbank direkt zu verändern sondern einfach dem Nutzer zB das klicken auf senden abzunehmen oder automatisch bestimmte Bilder von einer Website kopieren oder so... Also alles was man theoretisch auch ohne java erledigen kann.

Kommentar von procoder42 ,

bestimmte Bilder von einer Website kopieren oder so

Und warum sollte man da dann ausgerechnet dein Tool und nicht zB Wget verwenden ?

Kommentar von Reyha24 ,

Glaube Limearts hat die Frage falsch verstanden. Passiert jedem mal :)

Kommentar von 3v1lH4x0R ,

Ähm dafuq? Er will im Prinzip n automatisierten Browser. Und das geht auf jeden Fall.

Keine passende Antwort gefunden?

Fragen Sie die Community