Http Https Verbindung, Cookies, Formulare, JS mit Java-Boardmitteln

Hallo,

steht schon dort:

Http Https Verbindung, Cookies, Formulare, JS mit Java-Boardmitteln

ich bräuchte:

Get, Post, Cookies, JS, Formulare, Anmelden, Connection keep alife und den HTML-Inhalt einer Website. Das Parsen wäre dabei nicht so das große Problem.

Mit Get wird eine Anfrage gesendet, der Server sagt, verwende bitte die und die Cookies, auf der Website steht ein Formular mit vielen Eingabefeldern, in jedes soll eine bestimmte Zeichenkette eingetragen werden, das Formular soll per Post übermittelt werden, auf der Website ist man jetzt angemeldet, es besteht eine Session, usw.

Ziel: Browsergame ohne Browser automatisch im Hintergrund spielen, bei dem so genannte Bots/Roboter nicht verboten, sondern sogar gewünscht sind!

Problem: JS kann ich nicht, JS stelle ich mir schwierig vor, sonst hätte ich Greasemonkey verwendet, ein zauberhaftes Add-on für FireFox, das JS, während es gestartet ist, verändern kann! Und mit JS ist vieles möglich!

Schreibt mir jemand: Beliebige Website mit beliebige Formular aufrufen, in die ersten drei sichtbaren Eingabefelder 1, 2 und 3 eintragen, die anderen nicht ausfüllen und absenden? Vielen Dank im Vorraus!

Ein Tutorial tätes auch!

Hab was entdeckt:
bots - How can a program control another program? - Stack Overflow

“bots use system calls to map themselves into the game client’s memory space,”

Also direkt den Speicherbereich von FireFox manipulieren, was bei Klick auf Senden passieren würde.

Kennt sich denn hier jemand damit aus, FireFox manipulieren, DLL injection, usw.? Vielen Dank im Vorraus!

wenn JavaScript nicht in dem Sinne ein Thema ist, dass in einer browser-artigen Umgebung Eingaben erfolgen und JavaScript der Originalseite dazu ausgeführt werden muss für komplizierte Aktionen,
dann hilft für den Rest, Webseiten laden, Formulare abschicken, Cookies und Co. unabhängig vom Browser direkt in Java kontrolliert vielleicht HttpClient, bekannt?
Apache HttpComponents - HttpComponents HttpClient Overview


welches wäre das eigentlich?
schwer vorstellbares Konzept, wenn sowas offiziell dazugehört, dann keine ‚Bots‘ fertig vorhanden,
Einstellungen für automatisch kontrollierte Aktionen für den User im Server?
kein browser-unabhängiger effizienter Zugriff/ API?

zum Vergleich, ich kenne mich da nicht aus, und nenne nur ungern den Namen, aber: Google APIs - Wikipedia, the free encyclopedia
wäre verrückt wenn google dazu aufrufen würde, ihre Webseiten mit einem Bot über Browser anzusteuern…

Ach, das geht schon alles mit Java-Bordmitteln, dafür brauchts nicht mal irgendeine schrottige Apache-Lib (ich hasse diesen Dreck), und der gelinkte SO-Thread geht in eine völlig andere Richtung an deinem Thema vorbei, da gehts um was ganz anderes.

Grundsätzlich : ein “Browsergame” bei dem Bots ausdrücklich erwünscht sind … und dann gibts keine ? Weder kann ich das Konzept hinter dieser Entscheidung verstehen noch den Grund warum es da noch nichts gibt. Alles sehr fragwürdig. Auch sollte es, wie schon von Slater angemerkt, eine vernünftige API-Anbindung geben statt einen potentiellen User quasi zu zwingen einen Browser nach zu bauen (was gar nicht mal so schwer ist).

Bzgl JavaScript : man müsste prüfen was darüber wirklich läuft und es dann nachbauen, bzw es mit einer JS-Engine in einem passendne Kontext ausführen. Wird je nach dem wie umfangreich das Ganze ist n ziemliches Stück Arbeit.

Allgemein wird ja hier doch geholfen, aber nicht auf diese Art, und schon gar nicht in diesem Ton.
Um es mal auszudrücken wie der Post auf mich wirkt : Ey isch hab hier was und nu mach ma Hilfe hier, Digga …
Grundsätzlich läuft das hier eigentlich so ab : Man hat ein Projekt und entsprechend Code, und wenn man mit der einen oder anderen Zeile ein Probleme hat postet man dieses hier. Aber einfach ohne alles (und ich vermute sogar mal ohne weiteres Hintergrundwissen, denn sonst wüsstest du dass das alles mit Java ohne zusatz Libs geht) herkommen und quasi verlangen das andere deine Arbeit machen. Ähm … NEIN ?! Bezahl mich mit nem Stundenlohn ab 8,50€ aufwärts und man kann drüber verhandeln, sonst fruste ich doch lieber täglich 10 Stunde auf Arbeit ab …

Also : wenn du was hast und ein einem bestimmten Punkt nicht weiter kommst können wir gerne helfend zu Seite stehen, aber deine Arbeit wird hier keiner so einfach freiwillig machen.

moderatorischer Hinweis:
die Formulierungen in den ersten Postings sind etwas gewöhnungsbedürftig, aber eher einsilbig,
ein Problem könnte höchstens ‚Schreibt mir jemand:‘ sein und das klingt auch so abgehakt dass es vieles bedeuten kann
(z.b. auch Richtung ‚Schreibt mir zufällig jemand folgendes?‘, forsch aber ok)

darauf kann man noch höflich bis neutral nüchtern hinweisen/ reagieren,
aber in 7 Zeilen so drastisch darüber zu meckern (und ich habe auch das ‚hasse diesen Dreck‘ zu meinem Link registriert :wink: )
ist weit übers Ziel hinausgeschossen

‚[…] nicht in diesem Ton […] hier, Digga […] quasi verlangen, dass andere deine Arbeit machen […] NEIN ?! Bezahl mich […]‘, nun mach doch mal einen Punkt…

Ich war der Thread. Vielleicht unhöflich von mir.

Mein Problem ist, das ich nicht weiß, wie Cookies gespeichert, zusammengebaut und verwendet/geschickt werden. Deshalb eine Lib.

Nun, Java (URLs usw.) soll sich in dem Fall einfach so verhalten, wie sich FireFox verhält, die Webseite soll gar nicht mitbekommen, das der Client verändert wurde.

Angenommen, ich könnte mit injection erreichen, im Browser wurde auf Senden geklickt, wäre das schon super.

Wenn ihr sagt, absolut nicht legitim, verstehe ich das auch. Bezahlen kann ich nicht, lieber schreibe helf ich in anderen Themen mit 100 Beiträgen. deal?

Grüße.

was für eine Vorlage, bestimmt mit Absicht getrollt, aber dann ja nett zum Spaß geeignet:
bist du verrückt? um 100 deiner Beiträge zu verhindern würden manche gar Geld zahlen! :wink:

so, Spaß beiseite, bei CyborgBeta muss man nicht ganz so höflich sein wie bei einem neuen User, dennoch natürlich unnötig weiter groß zu diskutieren,
besonders @Sen-Mithrarin schon mal der Hinweis dass idealerweise kein Posting mehr in diesem Thread hier,
keine Diskussion, keine Hinweise auf Frechheit, übliche Verhaltensweisen/ Preise von Softwareentwicklung oder was auch immer,

auch was das für ein Bot oder Webseite ist muss ja nicht endgültig hinsichtlich Legalität hier verhörartig nachgefragt/ ausgebreitet werden…,
allgemein schon, in diesem Fall sicher verzichtbar,

fachliche Hinweise ginge durchaus, aber stark überlegen ob es das wert ist und nicht Risiko zu Abfall in tiefe Regionen besteht,
noch ist der Thread ok, wenig aussichtsreich aber nicht zugespammt,
falls wer was inhaltlich zu sagen hat dann bitte, anderes ist zu sparen

Ich verwende die HttpComponents auch sehr gerne. Damit hat man schon einmal das Handwerkszeug um in Java eine Browser zu simulieren. Dort bekommt man Cookieverwaltung und alle verschiedenen HTTP-Request-Typen mitgeliefert. Die auf der Projektseite aufgeführten Tutorials bieten einen sehr guten Einstieg.
Es bleibt eigentlich nur noch das Parsen des Webseiteninhaltes übrig.
Das funktioniert ganz gut mit jsoup.

Mit den beiden Bibliotheken kann man sich die gewünschte Funktionalität sicherlich zusammenbauen.

Vielen Dank. Wenn Cookies “dynamisch” durch JS zusammengesetzt werden, wirds kompliziert.

Dann könntest du ggf. mit Rhino / Nashorn die entsprechende Codepassage evaluieren lassen.

Das letzte was ich in diesem Bereich gemacht habe war mit Selenium.

Das funktioniert ausgesprochen gut.
Damit wird z.B. ein beliebiger Browser (Firefox, Chrome, IE) ferngesteuert und mit CSS-Selektoren kann man dann auf die verschiedenen Elemente klicken, etc.
Sehr sehr gut und sehr einfach.

Problem: Es ist nicht Headless. Man sieht den Browser und was passiert. Das ist zum Debuggen großartig.

Wenn man das ganze Headless haben möchte, dann kann man unter einem richtigen Betriebssystem (Windows zähle ich hier nicht dazu) das ganze auf einen weiteren Workspace verschieben und bekommt dann davon nichts mehr mit, solange man sich von diesem Workspace fernhält. Dies war meine Wahl.

Es gibt auch noch einen Hack bei dem man den Browser auf einem nicht existierenden virtuellen Monitor darstellt. (Hab davon nur gelesen es aber nicht ausprobiert)

Und dann gibt es mit Selenium noch die Möglichkeit statt einem Browser einen anderen sogenannten WebDriver zu nehmen, der headless arbeiten kann. (PhantomJS und Ghostdriver)

Selenium ist Plattform und Programmiersprachen unabhängig. Daher finden sich auch viele Beispiele wie die API benutzt werden kann in Ruby oder Phyton, aber auch in Java.

Ich habe allerdings Clojure als Sprache gewählt und damit das ganze über die Java-API angesprochen.

Da Clojure eine REPL mitbringt und man nebendran direkt den Browser laufen lassen kann der den aktuellen Befehl wiederspiegelt hat sich ein hervorragendes Setup ergeben mit kürzestem Feedbackloop.

[clojure](set-text-for “#foo” “bar”)
// Im Broser den Text bar sehen
(click-on “#baz”)
// Im Browser kucken wie baz geklickt wurde
[/clojure]

Gut, mal wieder zurück zum fachlichen …

hust Wie wäre es dann mal mit Doc lesen ? Java Platform SE 8 erklärt alles was an Java-SE-Bordmitteln dafür nötig ist. Dafür braucht es wie gesagt keine (Apache-)Lib.

Hint : Ein String im Format [protocol]://[host]:[port]/[resource] nennt man URL … von da aus ist alles direkt oder indirekt an Informationen gelinkt was du brauchst. Lediglich beim JS-Part wirds noch mal kompliziert.

[ot]es ist schon aufgefallen das du gerne mal ohne login postest, und auch der thread-titel „dynamisch mit js zusammengebaut“ schwirrte hier doch mal durch die gegend …
wie wäre es wenn du einfach mal mit offenen karten spielst das man dir auch mal wirklich richtig helfen kann statt immer nur theoretisch um den heißen brei drumrum zu tanzen ?[/ot]


Vielleicht noch ein praktisches Beispiel :

Ich habe 2009 für ein paar Freunde einen Bot für das Browsergame „Pennergame“ geschrieben. Es war eigentlich nicht viel mehr als mit Wireshark die Requests zu loggen und nach zu bauen. Und für die vorhandene „Anti-Bot-Sperre“ gab es dank dem verfügbaren „PHP-Pennerbot“ eine Möglichkeit eine User-Interaktion zu simulieren. Ich musste weder einen Browser simulieren noch irgendwas mit JavaScript machen.
Vielleicht hilft dir ja der Ansatz in diese Richtung.

Wieso hustest du rum? Lustig, ich hab auch schon mal einen Bot für einen Bot für Pennergame geschrieben, dabei gings um automatische Spenden, ist aber schon was her.

Klar, einfach .txt +
rumschicken, aber sobald Logik und “Dynamik” auf Clientseite ist, wird es ziemlich schwierig bis unmöglich.

Wenn windows abgelehnt wird, sollte der Bot wenigstens einigermaßen headless auf Debian (mit Java) ohne grafischen Browser laufen, whrs. auch unmöglich.

Irgendwie reizt mich, FireFox nur für meine Zwecke und nur für mich ‘zu manipulieren’’, wenn auch utopisch, oder whrs. nicht erlaubt.

Das war doch jetzt offen und ehrlich…

Also ich hab keinen Einstieg dazu.

Mal eine unkonventionelle Idee: JS mit dem Projekt lernen :slight_smile: … ich habe mich auch lange gegen JS gesträubt. Ich bin heute noch kein Freund von, aber ich würde mittlerweile einen Anwendungsfall damit umsetzen, wenn es für JS geeigneter ist. Sobald man etwas drin ist, ist alles halb so schlimm.

[QUOTE=CyborgBeta]Wieso hustest du rum? Lustig, ich hab auch schon mal einen Bot für einen Bot für Pennergame geschrieben, dabei gings um automatische Spenden, ist aber schon was her.

Klar, einfach .txt +
rumschicken, aber sobald Logik und “Dynamik” auf Clientseite ist, wird es ziemlich schwierig bis unmöglich.

Wenn windows abgelehnt wird, sollte der Bot wenigstens einigermaßen headless auf Debian (mit Java) ohne grafischen Browser laufen, whrs. auch unmöglich.

Irgendwie reizt mich, FireFox nur für meine Zwecke und nur für mich ‘zu manipulieren’’, wenn auch utopisch, oder whrs. nicht erlaubt.

Das war doch jetzt offen und ehrlich…

Also ich hab keinen Einstieg dazu.[/QUOTE]

Sorry, aber verstehe die Frage nicht. Wo soll jetzt das Problem mit der Logik sein ?
Klar, so n “Spenden-Bot” hab ich auch mal gezimmert. War ja dank der vielen im Netz verfügbaren Proxy-Listen auch schnell gemacht. Der Flaschen-Sammel-Bot war da schon etwas komplexer.
Mal so grob skizziert :

  1. einloggen (genau deine frage : form ausfüllen und session-cookie mitnehmen)
  2. aktuellen “status” auslesen (also ob und was für aktivitäten gerade laufen)
  3. wenn möglich das “flaschen sammeln” starten (hier gabs mit der abfrage “bitte auf die zahl klicken” die größe hürde, aber wie gesagt : ich hab einfach den php-bot portiert und mir vom schaaf-bot die matrix-files geklaut)
  4. auf das ende der aktion warten und bei 2 (bzw wenn nötig auch 1) wieder anfangen
  5. nebenbei (die idee kam mir erst später) einen weiteren thread laufen lassen der alle paar minuten random eine seite aufruft und somit das session-cookie (bzw die session selbst) “am leben” hält

Da ist schon dynamik drin (z.B. ob nur 10min oder 60min sammeln (war abhängig von verschiedenen Faktoren)), und auch die Logik (das ganze parsen und auswerten). Ich hab den Code leider nicht mehr /EDIT - ich hab ihn in den Tiefen meines riesigen 8TB-RAID5 doch noch gefunden/ (ist mir auf nem USB-Stick abhanden gekommen) und bräuchte sicher einige Zeit um es erneut umsetzen zu können (auch wenn ich vieles besser machen würde als damals), aber es ist (abgesehen vom vermutlichen Umfang her) nichts anderes als das was du hier eigentlich im Topic fragst.

Von daher, ich wiederhole mich mal : ich verstehe die Frage nicht !

Man braucht keine Lib, man muss keinen Browser simulieren, emulieren, gar einen vorhanden extern ansteuern. Man muss lediglich die paar Requests die sonst der Browser macht selbst an den Server senden und den Response entsprechend auswerten. Übertreibt man es und setzt die eine oder andere gute Lib clever ein kann man sich quasi einen eigenen “Clienten” basteln, den man dann je nach belieben mit weiteren Funktionen soweit automatisieren kann wie man es gerne hätte, und das ganze natürlich auch headless für ne kleine Linux-Maschine.

Mit der Idee irgendwas mit JS zu machen (bzw sich in diesem Rahmen überhaupt damit befassen zu wollen obwohl eigentlich komplett unnötig) und jetzt auch noch extern einen Browser steuern wollen … damit schießt du um Längen am Ziel vorbei. Das geht einfacher mit weniger Code. So schwer ist es nicht.

// Edit 2
Ich habs grad mal aus langer weile mit nem alten account getestet : man bräuchte nicht mal mehr ein “captcha” zu knacken sondern nur noch direkt den Request absetzen. Was die Sache deutlich vereinfacht.

Hmh, ja, sehr ausführlich. Das mit den Spenden ging anders. Es gab eine sehr bekannte, 3rd party Seite, auf der konnte man seinen Spendenlink eintragen und gleichzeitig 10 anderen Links spenden, somit brauchte man keine unterschiedlichen IPs (wenn das jeder gemacht hätte würde). Automatisch.

Flaschen sammeln, Captcha lösen, Ziffern 1 bis 9, gedreht, unterschiedliche Position, Shapes, PHP, nicht im 10min. Takt sammeln, Gegenstände,…

PHP ist deswegen super, weil man es auf einem kleinen Webserver verwenden kann. :wink: apache for friends. Java aber auch.

Gut, ich kannte 2 Leute, die schon mal einen Bot geschrieben hatten, ihn auch gegeben hatten. Logik braucht man gar nicht so viel, das stimmt.

Mein Pennergame-Account ist deaktiviert, hab ich selber deaktiviert, wurde mir dann langweilig oder so ähnlich.

Aber konkret könntest du mir sagen, mit welchem Verfahren man die Position von den Ziffern 1 bis 9 in einem img ermitteln kann, welche Shapes und Templates man dafür braucht. Es soll nicht um Captcha gehen. Captcha sind wichtig, Captcha sollten nicht umgangen werden.

Und naja, fange ich einfach mal mit an. Aber nicht mehr heute.^^

[EVIL]
Wolltest du nicht mal SQL lernen?

Ich selbst bin ja per Cookie immer automatisch angemeldet, mich wundert echt dass du dir die Zeit und Energie nimmst um dich abzumelden, dann eine anonyme Quatschfrage zu stellen, dich wieder anzumelden und mit “Ich war der Thread. Vielleicht unhöflich von mir.” wieder aufzutauchen
[/EVIL]

+1

@CB
Wie gesagt : den Code um das “Captcha” zu umgehen hab ich auch nur “geklaut”. Und es ging dabei auch nicht um das erkennen der Zahl im Sinne von OCR, sondern einfach ein Pixel-für-Pixel-Vergleich mit vorhanden Masken die aus unzähligen Captchas extrahiert wurden (Pennergame hat den Fehler gemacht immer den gleichen Font zu nutzen statt random, so kann man mit einer Matrix über das Image laufen und braucht nur zu vergleichen; wäre zwar auch bei random-Font möglich, der Aufwand wäre aber auf Grund der weit größeren Menge deutlich höher und die Fehlerwarscheinlichkeit damit auch, was, wenn man es richtig gemacht hätte, viele Bots hätte enttarnen können).