"simulierter Browser"?

RoCMe

Erfahrenes Mitglied
Hallo!

Erst einmal Sorry für den ach so aussagekräftigen Titel - kann es nicht besser zusammenfassen...

Ich habe vor einiger Zeit als wissenschaftliche Hilfskraft ein Programm geschrieben, dass (natürlich mit Erlaubnis des Anbieters) gewisse Informationen aus einer Webseite ausliest und in einer Datenbank speichert.
Im Prinzip habe ich dafür lediglich ein File über eine URL geladen, mit Tagsoup bearbeitet und schließlich ein paar mal XPath drübergejagt, um die gesuchten Informationen zu finden.

Jetzt habe ich - privat - ein ähnliches Vorhaben, allerdings muss ich dieses mal u.A. einen Login-Vorgang absolvieren, bevor ich an die entsprechende Website komme, d.h. ich kann nicht mehr direkt eine URL aufrufen. Im Prinzip benötige ich also eine Art "Browser-Klasse", der ich z.B. folgendes sagen kann:

1.Lade http://www.example.de
2. Gebe in Feld xy "userName" ein und in Feld yz "passwort"
3. simuliere einen Klick auf "Login"
4. ...

Hier findet sich z.B. ein ähnliches Projekt in Python. Da wird einfach die Klasse "Browser" importiert, die genau das in Pyhton darstellt, was ich gerne für Java hätte...

Vielleicht habe ich auch einfach nur die falschen Suchbegriffe benutzt, jedenfalls blieben meine google-Versuche bis jetzt ohne Erfolg...

Ich bin mir sicher, dass es sowas für Java gibt - wenn nicht schon mitgeliefert, dann doch zumindest als zusätzliches Paket...

Wäre für Hinweise sehr dankbar!

Gruß,

RoCMe

EDIT: Hatte irrtümlich das Wort "implementiert" statt "importiert" verwendet - könnte zu Missverständnissen führen und wurde deshalb berichtigt :)
 
Zuletzt bearbeitet:
Hey!

Danke erst mal für deine Antwort. Allerdings glaube ich, dass ist nicht ganz was ich suche... Sehe ich gerade nur vor lauter Bäumen den Wald nicht? Der Authentication Teil bezieht sich doch nur auf Authentifizierung gegenüber dem HTTP-Server, und nicht gegenüber einer Web-Anwendung - richtig? D.H., dass ist eine Ebene zu tief... Ich brauche eine Möglichkeit, Textboxen zu füllen und dann einem Link zu folgen...

Oder rede ich jetzt gerade Blödsinn?

Danke für weitere Hilfestellungen :-)
 
Ein Browser erstellt auch nur einen POST- od. GET-Request an den Server mit den ausgefüllten Feldern als Parameter.

Das Gleiche kannst du mit dem HTTPClient erledigen. Du hast zB im Browser ein Textfeld:

HTML:
<input type="text" name="user" value="" />

wobei das name-Attribute den Namen des Parameters definiert und value den Wert. Im HTTPClient setzt du den Parameter halt direkt:

Java:
PostMethod method = new PostMethod("http://www.xyz.de/login.php");
method.addParameter("user", "RoCMe");
int statusCode = httpClient.executeMethod(method);
System.out.println("statusCode=" + statusCode + ",response=" + uploadMethod.getResponseBodyAsString());

Also, du erstellst einen HTTP-Request, setzt deine Request-Parameter (zB Username und Passwort), führst den Request gegen den Server aus (executeMethod) und bekommst deinen Response.
 
Zuletzt bearbeitet von einem Moderator:
hm...

ja, so theoretisch kann ich das ja nachvollziehen... Allerdings scheitert die praktische Umsetzung daran, dass ich die entsprechenden "POST-Values" nicht finde... Wireshark liefert nur ein paar wenige http-Calls, und keines von denen enthält ein POST - es gibt nur ein GET. Allerdings liegen dazwischen einige "TLSv1" Mitschnitte, mit denen ich aber naturgemäß nicht viel anfangen kann...

Deswegen hatte ich auf eine so bequeme Lösung wie im Python Beispiel gehofft...
 
Alternativ kannst du auch mal htmlunit ausprobieren: http://htmlunit.sourceforge.net/

eine login wurde damit ungefähr so gehen:

Code:
WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage(url zur seite);
HtmlForm form = page1.getFormByName(name der from);

HtmlTextInput textField = form.getInputByName(name des Felds);
textField.setValueAttribute(neuer Wert für Feld);

HtmlSubmitInput button = form.getInputByName(name vom Knopf);
HtmlPage page2 = button.click();
Viel Spaß damit ;)
 
yeah - das ist anscheinend genau das, was ich gesucht habe :-) Ich habe jetzt gerade keine Zeit, mir das genauer anzusehen, aber ich glaube das passt :) Danke!
 
Hey!

Das ist im Prinzip genau das, was ich haben wollte :)

Allerdings hat das ganze noch einen kleinen Schönheitsfehler: Ich kann mit Maven nur die Version 1.13 finden, und die ist von August 2007....

Die von mir gesuchte Funktionalität ist auch da vorhanden, aber mir wäre aktuelle Software natürlich lieber...

Ich kenne mich mit Maven nicht sooo gut aus - bis jetzt reichte es immer, sich durch das Eclipse-Maven Menü zu klicken, um die aktuellen Versionen der Pakete zu bekommen! Aber hier finde ich wie gesagt nichts aktuelleres... :-(

Vielen Dank jedenfalls schon mal für die Tipps!

Gruß,

RoCMe
 
Zurück