# Eingabe (auf Internetseite) durch ein Programm machen lassen



## ernst (16. Sep 2014)

Hallo zusammen,
Wenn man mit einem Browser auf eine Internetseite geht, kann man (z.B. ein Mensch) 
z.B. einen Button anklicken und einen Text in ein Textfeld eingeben.
Diese Tätigkeiten verrichtet z.B. irgendein Anwender.
Frage:
Wie kann man diese händischen Tätigkeiten des Anwenders ein Programm machen (nachbilden) lassen?
Kann mir jemand dazu Infos bzw. einen Java-Programmcode geben.
Bis jetzt habe ich einfache Servlets (Demos) programmiert.

mfg
Ernst


----------



## stg (16. Sep 2014)

Selenium - Web Browser Automation


----------



## AndiE (17. Sep 2014)

Ich weiß nicht, ob ich es richtig verstehe. Aber rein Theoretisch sollte sich der String, den das Formular aussendet: "www.xy.com? a=x...", doch nachmachen lassen, und von einem Programm senden lassen.


----------



## JavaMeister (17. Sep 2014)

Dazwischen gibt es signifikante unterschiede. Nicht jede Variable wird per get erwartet. 

Manchmal werden noch viele versteckte Infos übermittelt. Man erhält Cookies und Infos zurück muss java Script auswerten. 

Das bekommt ein Browser besser hin. 

Die von dir angesprochene Lösung wären für eine wohldefinierte API sinnvoll


----------



## ernst (18. Sep 2014)

>
>Ich weiß nicht, ob ich es richtig verstehe. Aber rein Theoretisch sollte 
>sich der String, den das Formular aussendet: "www.xy.com? a=x...", 
>doch nachmachen lassen, und von einem Programm senden lassen. 
>
Rein theoretisch müsstest du dann in einem _fremden_ Programm herausbekommen, 
welcher String von diesem wann gesendet wird.
Das stelle ich mir aber nicht einfach so einfach vor (zumindest traue ich mir dies nicht mit elementaren Mitteln zu)
Oder wie willst du das machen?

mfg
Ernst


----------



## dzim (18. Sep 2014)

Also ganz im Ernst (pun intended): Der Link oben (Selenium) ist schon eigentlich das was du möchtest. Es ist mit "Kanonen auf Spatzen" schiessen, aber nur dadurch bekommst du das Verhalten des Nutzers über Code nachgebildet. Das ist der einzige Sinn und Zweck des Selenium-Frameworks. Egal ob du da mit dem internen Headless-Browser arbeitest oder tatsächlich installierte Browser fernsteuerst (was in Hinblick auf unterschiedliches Verhalten der einzelnen Browser tatsächlich das Beste ist). Fakt ist, das Selenium von vielen Projekten entweder zum automatisierten Monitoren oder Testen von Webseiten verwendet wird. Es ist halt nur ein schwerer Brocken...


----------



## lord239123 (18. Sep 2014)

Ich musste sowas mal während eines Praktikums machen.
Dabei ging es darum, Felder automatisch auszufüllen.
Dafür habe ich einfach einen String mit der URL erstellt und an diese URL dann die IDs der Objekte mit den dazu gehörenden Werten angehängt.
Die URL wurde dann per Code im Browser aufgerufen und die Felder waren ausgefüllt.
Um die IDs der Objekte zu bekommen, musst du ein wenig den Quellcode der entsprechenden Seite durchsuchen.
Dafür habe ich mir ein kleines Programm geschrieben, welches automatisch den Quellcode nach Stichwörtern durchsucht.
Z.B. Wenn Vor einem RadioButton steht "männlich" habe ich nach diesem Wort im Quelltext gesucht und habe dadurch die ungefähre Position der ID bekommen.
Ist bei über 1000 Zeilen Quellcode einer Seite sehr nützlich.


----------



## DarXun (18. Sep 2014)

lord239123 hat gesagt.:


> Ich musste sowas mal während eines Praktikums machen.
> Dabei ging es darum, Felder automatisch auszufüllen.
> Dafür habe ich einfach einen String mit der URL erstellt und an diese URL dann die IDs der Objekte mit den dazu gehörenden Werten angehängt.
> Die URL wurde dann per Code im Browser aufgerufen und die Felder waren ausgefüllt.
> ...



Wie JavaMeister schon schrieb geht das nicht für alle Informationen. Das "Anhängen" geht ja nur bei nem HTTP-GET.


----------



## ernst (19. Sep 2014)

>
>Dabei ging es darum, Felder automatisch auszufüllen.
>Dafür habe ich einfach einen String mit der URL erstellt und an diese URL 
>dann die IDs der Objekte mit den dazu gehörenden Werten angehängt.
>Die URL wurde dann per Code im Browser aufgerufen und die Felder waren ausgefüllt.
>
Wie kannst du veranlassen, daß in einem _fremden_ d.h. nicht vor dir geschriebenem Programm,
nämlich dem Browser,  eine URL aufgerufen wird?

mfg
ernst


----------



## dzim (19. Sep 2014)

Indem Programme - wie etwa Selenium - den Browser fernsteuern. Tastatur- und Mauseingaben vornehmen, etc....


----------



## ernst (19. Sep 2014)

>
>Indem Programme - wie etwa Selenium - den Browser fernsteuern. 
>Tastatur- und Mauseingaben vornehmen, etc....
>
Ja, das meine ich auch.
Aber - so wie ich - AndiE verstanden habe, will der das ohne Selenium machen.
Und das ist nicht so einfach, oder ?

mfg
ernst


----------



## JavaMeister (19. Sep 2014)

> Und das ist nicht so einfach, oder ?



Kann man pauschal nicht sagen.


----------



## ernst (19. Sep 2014)

>
>Kann man pauschal nicht sagen.
>

kanst du mir ein Beispiel geben (mit Quellcode), wo es einfach(er) ist?

mfg
ernst


----------



## JavaMeister (19. Sep 2014)

Beispiel: Ein RestService wäre es einfacher ohne Selenium. Da würde man SoapUI nehmen oder eben selber programmieren.

Eine Website, wie OGame oder ein anderes Browsergame (worauf dieser Thread abziehlt) wäre Selenium besser.

Und Code würde hier nix bringen. Dafür ist dein Skill noch überhaupt nicht so weit. Vor allem fehlen Dir auch Grundlagen in HTTP.


----------



## ernst (20. Sep 2014)

>
>Beispiel: Ein RestService wäre es einfacher ohne Selenium. 
>Da würde man SoapUI nehmen oder eben selber programmieren.
>
Ich verstehe den folgenden Satz von dir nicht:
"Ein RestService wäre es einfacher ohne Selenium"
Außerdem, was ist ein RestService ?

>
>Und Code würde hier nix bringen. 
>Dafür ist dein Skill noch überhaupt nicht so weit. 
>
Was meinst du damit?

>
>Vor allem fehlen Dir auch Grundlagen in HTTP.
>
Welche ?

mfg
ernst


----------



## stg (20. Sep 2014)

ernst hat gesagt.:


> >
> >Beispiel: Ein RestService wäre es einfacher ohne Selenium.
> >Da würde man SoapUI nehmen oder eben selber programmieren.
> >
> ...



Wenn du das Wort nicht kennst, dann gib es doch einfach mal bei Google ein und erhalte 1,23 Milliarden (!) Ergebnisse. Vereinfacht gesagt handelt es sich einfach um eine bestimmte Art von Webservice. Aufgrund der Eigenarten dieser speziellen Services wäre Selenium einfach "zu viel des Guten", da Selenium speziell darauf abzielt Benutzereingaben (in oft nicht oder nur bedingt für Maschinen interpretierbaren Webservices) zu simulieren.



> >
> >Vor allem fehlen Dir auch Grundlagen in HTTP.
> >
> Welche ?


HTTP selbst ist hier mit "Grundlagen" gemeint. 
Oder übersetzt: Wenn du Fussball spielen willst (das Fernsteuern eines Browsers), dann lern doch erst mal laufen (Webprotokolle etc)


> >
> >Und Code würde hier nix bringen.
> >Dafür ist dein Skill noch überhaupt nicht so weit.
> >
> Was meinst du damit?


Um beim Fußball zu bleiben: Lerne die Spielregeln, bevor du dich mit Taktik auseinandersetzt.


----------



## ernst (21. Sep 2014)

>
>Wenn du das Wort nicht kennst, dann gib es doch einfach mal bei Google ein und 
>erhalte 1,23 Milliarden (!) Ergebnisse. Vereinfacht gesagt handelt es sich einfach 
>um eine bestimmte Art von Webservice
>

1)
Man bekommt zwar viele Ergebnisse, aber bei den meisten wird RestService anders geschrieben,
z.B. mit Bindestrich, oder REST gross geschrieben.

2)
Kannst du mir gute Quellen nennen zu dem Thema "Webservice" ?

mfg
ernst


----------



## JavaMeister (21. Sep 2014)

Web service - Wikipedia, the free encyclopedia


----------



## AndiE (21. Sep 2014)

Wie ist das Szenario? Ich bin davon ausgegangen, dass es eine Anwendung in einem Netzwerk gibt. Die einen können mittels dem Webbrowser darauf zugreifen, die anderen mit der Software. Typisch denke ich, ist ein Lager dafür. Der Lagerverwalter hat die Verwaltungssoftware für das Lager, die Kollegen haben Zugriff über den Webbrowser um festzustellen, wo die Teile liegen, die sie brauchen, sie abzurufen usw.. Beide Systeme greifen auf einen gemeinsamen Webserver zu, die Software per REST- die anderen per JSP oder JSP- wäre so mein Ansatz in so einem Fall.


----------



## dzim (27. Sep 2014)

Irgendwie ist dieser Thread aus dem Ruder gelaufen, oder? Was mir beim lesen der letzen Posts, die ich verpasst habe, eingefallen ist, war:
Double Facepalm

Und eigentlich ist das noch nicht genug...
Quadruple Facepalm


----------

