python/Selenium und injected javascript Datenaustausch über network Requests

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bernd13
User
Beiträge: 26
Registriert: Sonntag 25. Juni 2023, 11:13

Hallo,
ich hoffe ihr könnt mir einen guten Tipp geben:
Ich will mir einen kleinen "Bot" bauen (einfahc nur ein Mischmasch an miteinander interagierenden Python Scripten)
der für mich Roulette spielt.

Dazu nutze ich Python+Selenium um die Webseite aufzurufen die ich will (halt den Roulettetisch im Onlinecasino).
Ich "injecte" auch einen javascript code, der http requests und responses abfängt, sieht alktuell so aus: (das mit dem schrieben in eine text datei schmeiß ich wieder raus, wiel klappt eh nicht)

Code: Alles auswählen

# Inject the JavaScript code to capture request and response data and save it to a growing text file
js_code = """
(function () {
    var capturedData = [];

    function saveDataToTxt(data) {
        capturedData.push(data);
    }

    (function (xhr) {
        var XHR = XMLHttpRequest.prototype;
        var open = XHR.open;
        var send = XHR.send;
        var setRequestHeader = XHR.setRequestHeader;

        XHR.open = function (method, url) {
            this._method = method;
            this._url = url;
            this._requestHeaders = {};
            this._startTime = (new Date()).toISOString();

            return open.apply(this, arguments);
        };

        XHR.setRequestHeader = function (header, value) {
            this._requestHeaders[header] = value;
            return setRequestHeader.apply(this, arguments);
        };

        XHR.send = function (postData) {
            var that = this;

            this.addEventListener('load', function () {
                var endTime = (new Date()).toISOString();

                var myUrl = that._url ? that._url.toLowerCase() : that._url;
                if (myUrl) {
                    var requestData = {
                        method: that._method,
                        url: myUrl,
                        headers: that._requestHeaders
                    };

                    var responseHeaders = that.getAllResponseHeaders();
                    var responseBody = that.response;

                    var responseData = {
                        url: myUrl,
                        statusCode: that.status,
                        responseHeaders: responseHeaders,
                        responseBody: responseBody
                    };

                    var capturedInfo = {
                        startTime: that._startTime,
                        endTime: endTime,
                        requestData: requestData,
                        responseData: responseData
                    };

                    saveDataToTxt(JSON.stringify(capturedInfo));
                }
            });

            return send.apply(this, arguments);
        };
    })(XMLHttpRequest);

    window.capturedData = capturedData;
    window.saveDataToTxt = saveDataToTxt;

})();

"""
Nun habe ich halt aber das simple problem dass die webseite/javascript zwar alle network requests, dom daten und co hat.
mein python/selenium code abe per se da mal noch keinen zugriff drauf hat.

Jetzt wäre die frage wie ich am besten diese 2-wege-kommunikation zwischen javascript und python/selenium hinkriege.

Weil im pürinzip will ich folgendes:
javacript code fängt eine neue request ab, liest ein paar daten raus.
und schickt ne message "nach oben" an den python code "Yo, neue request, hier sind die daten!"

python code macht dann alle möglichen sachen basierend auf den erhaltenen request daten, klicks und co.

und wartet dann wieder bis die nächste mesaage vom javascript coe kommt.

nicht undenkbar dass python auch mal was runter zum javascript code schicken will, brauche ich derzeit aber (noch) nicht.


Frage nur, wie kriegt mans hin?
Chatgpt sagt, der richtige weg wäre über websockets wozu man aber einen eigenen server und pipapo braucht.
die 0815 version wäre irgendwie mit weiterem injectedem javascript code, wo man einen eventlistener injected und irgendwie dessen return daten erhalten soll.

aber das schemißt mir die reihenfolge etwas über den haufen, weil eigentlich soll ja nicht mein python code dauernd nahcfragen müssen "Yo, neues event da" und der javascript code abtwortet.

sondern der JC code meldet sich von selbst wenn er was neues hat und mein python code fängt das ab und reagiert im prinzip nur auf die neu erhaltenen Daten.

Kann mir da Jemand ein gutes Grundgerüst sagen wie ich das quick and dirty umsetzen kann ohne große Vorkenntnisse? :-)
bernd13
User
Beiträge: 26
Registriert: Sonntag 25. Juni 2023, 11:13

Hat Niemand eine Ahnung wie man zwischen Python/Selenium Code und der Webseite Daten hin und her schicken kann? :-(
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Als Ping-Pong-Partner von ChatGPT zu fungieren, damit du moeglichst Aufwandsfrei zu deinem Endprodukt kommst, ist halt weniger Leute Sache. Die meisten hier verstehen sich als Anleiter fuer Leute, die das Programmieren in Python erlernen wollen. Nicht als kostenlose upwork-Alternative, die "quick and dirty"-Code durchbuddeln darf.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Und dann noch die Konstellation chatGPT + Online Casino.
Ich kann mich vor Motivation kaum halten.
bernd13
User
Beiträge: 26
Registriert: Sonntag 25. Juni 2023, 11:13

Okay, dann bleibt man halt lieber dumm als irgendwo zu fragen.

"Die meisten hier verstehen sich als Anleiter fuer Leute, die das Programmieren in Python erlernen wollen. "
Zum Glück frage ich nicht weil ich es lernen will sondern nur Text zum Ausdrucken brauche um mir den hintern damit abzuwischen :-)

Sosnt heißt es immer "Googl vorher erst mal".
Aber wenn man statt Google erstmal chatgpt fragt weil sich da vielleicht shcon eine Lösung findet und die Frage damit erledigt, ist man plötzlich beim PinPong Spielen.
Dann behaltet halt euren Kram und werdet stinkend reich damit :-)

Oder es hat schlicht keiner hier eine Ahnung und will es nicht zugeben, wer weiß? ;-)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ach, du bist einfach zu klug. Wir wissen nichts, und fuehlen uns von der maechtigen KI ganz furchtbar unter Druck gesetzt. Darum verteidigen wir unser letztes bisschen Vorsprung verzweifelt, bis uns alle die Dauerarbeitslosigkeit ereilt, weil coole Dudes so wie du durch einen simplen Chat-Prompt "Mach mich reich mit Online-Casino-Beschiss" zu den Mega-Babos werden, und uns niemand mehr braucht :cry: :cry: :cry:
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@bernd13: Den Allerwertesten kannst Du Dir auch einfach mit unbedrucktem Papier abwischen. Da musst Du keine Texte für ausdrucken. Falls Dir Papier mit Text drauf dafür lieber ist, dann ist ChatGPT tatsächlich eine gute Lösung. Das kann sogar Gedichte oder Liedtexte generieren. 🙂

Das Du Programmieren in Python lernen willst, sehe ich nicht. Das sagst Du doch sogar selbst, dass Du etwas haben willst, was möglichst ohne Vorkenntnisse von Dir benutzt werden kann.

Du bekommst ja anscheinend keine Lösung von ChatGPT, sonst würdest Du hier ja nicht fragen. Das Ping-Pong-Spiel fängt ja erst an wenn ChatGPT keine funktionierende Lösung liefert. Was es übrigens sehr häufig macht, weil das gar nicht dazu da ist Fragen korrekt zu beantworten. Das passiert zufällig mal und oft sind die Antworten auch in die richtige Richtung, aber um das beurteilen zu können, muss man das im Grunde auch ohne ChatGPT hinbekommen können.

Welchen Kram sollen wir behalten? Und da hier alle unentgeldlich ihre Freizeit zur Verfügung stellen, wie sollen wir damit stinkend reich werden? Der Vorschlag macht nicht wirklich Sinn.

Also ich gebe gerne zu, dass ich aus der Problembeschreibung aus dem ersten Beitrag nicht so wirklich schlau geworden bin, und im Grunde keine Ahnung habe was Du da genau machen/wissen willst. Mir geht es allerdings wie sparrow: der Anwendungsfall „Online-Casino“ hat einen negativen Motivationsfaktor, da überhaupt weiter nachzudenken oder zu -fragen.

Was hat das `xhr`-Argument in der zweiten inneren Funktion für einen Sinn? Der Wert, der da übergeben wird, wird nirgends verwendet.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten