C# Webview21 Textbox text senden

  • C#

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von DTF.

    C# Webview21 Textbox text senden

    Moin Liebe gemeinde von vb-Paradise :thumbsup:

    Ich stehe vor einem hartnäckigen Problem, bei dem ich langsam aber sicher verzweifle. Trotz vieler Versuche, es zu lösen, funktioniert es einfach nicht so, wie ich es mir erhoffe. Lass mich genauer auf die Details eingehen, Ich möchte erreichen, dass durch einen Klick auf den Button ein Text im Chat gesendet wird.

    Ich arbeite gerade mit "Microsoft.Web.WebView2" in C#, und mein Button-Code für das Absenden des Textes steht bereits. Allerdings stoße ich auf ein Problem: Wenn ich manuell den Text im WebView in das TextBox-Feld eingebe, ist das nicht mein Ziel. Ich möchte vielmehr, dass der Button den Text aus dem TextBox-Feld nimmt, das sich auf der Form befindet.

    Hier ist mal etwas Sourcecode von der Seite (die ich hier nicht nennen darf, oder?! falls doch korrigiert mich bitte!)

    HTML-Quellcode

    1. <div class="sc-bczRLJ gZKBeB"><div style="flex: 1 1 0%; --textColor: rgba(0, 0, 0, 0.44);"><div class="AutocompleteInputBar__autocompleteinputbar___R4p3n"><div data-ph="Schreib was Nettes..." class="editable" inputmode="text" contenteditable="true"></div></div></div><div role="button" tabindex="0" aria-disabled="false" class="sc-bczRLJ gNPlOm"><div color="rgba(0, 0, 0, 0.33)" height="24" width="24" class="sc-gKXOVf ivkxRw"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
    2. <path d="M12 2C6.477 2 2 6.477 2 12C2 17.523 6.477 22 12 22C17.523 22 22 17.523 22 12C22 6.477 17.523 2 12 2ZM12 4C16.418 4 20 7.582 20 12C20 16.418 16.418 20 12 20C7.582 20 4 16.418 4 12C4 7.582 7.582 4 12 4ZM8.5 8C7.672 8 7 8.672 7 9.5V10H10V9.5C10 8.672 9.328 8 8.5 8ZM15.5 8C14.672 8 14 8.672 14 9.5V10H17V9.5C17 8.672 16.328 8 15.5 8ZM6.89062 12C7.69063 15.206 9.67 17.5 12 17.5C14.33 17.5 16.3094 15.206 17.1094 12H6.89062Z" fill="currentColor"></path>
    3. </svg>
    4. </div></div></div>

    HTML-Quellcode

    1. <div style="flex: 1 1 0%; --textColor: rgba(0, 0, 0, 0.44);"><div class="AutocompleteInputBar__autocompleteinputbar___R4p3n"><div data-ph="Schreib was Nettes..." class="editable" inputmode="text" contenteditable="true"></div></div></div>

    HTML-Quellcode

    1. <div class="AutocompleteInputBar__autocompleteinputbar___R4p3n"><div data-ph="Schreib was Nettes..." class="editable" inputmode="text" contenteditable="true"></div></div>

    HTML-Quellcode

    1. <div data-ph="Schreib was Nettes..." class="editable" inputmode="text" contenteditable="true"></div>


    Hier ist mein C#-Code, der ausgeführt wird, wenn der "Absenden"-Button gedrückt wird:

    C#-Quellcode

    1. webView21.ExecuteScriptAsync("document.getElementsByClassName('sc-bczRLJ gNPlOm')[4].click();");


    Ich möchte erreichen, dass durch einen Klick auf den Button ein Text im Chat gesendet wird.
    Ich hoffe, dass meine bisherigen Informationen verständlich waren.

    *Topic verschoben*
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Was passiert bei einem einfacheren SVG- oder HTML-Konstrukt (Klassenname einfacher, Button verwenden)? Klappt das da überhaupt? Was ist mit [4]? Gibt es das Element mit diesem Index überhaupt?
    Daher zusammenfassend: Gestalte die Zielseite testweise so einfach wie möglich und schau, ob Dein C#-Code klappt. dann modifiziere schrittweise die Testseite, bis Du genau sehen kannst, wann es nicht mehr funktioniert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    An dieser Stelle finden Sie einen Screenshot von meinem Projekt, der veranschaulicht, wie ich es meine, um es vielleicht besser zu verstehen wie ich es mir Vorstelle,
    Also es funktioniert ja soweit, nur der nimmt den Text von der TextBox nicht mit

    Screen:


    /e Bild hinzugefügt, Danke an @VaporiZed
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „getsha“ ()

    getsha schrieb:

    ich konnte das Bild hier leider nicht hochladen
    Warum nicht?
    Bilder kannst Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten.

    Hab mal wieder nur die Hälfte gelesen. Daher ist mein Post#3 sinnlos.
    Du suchst also eine Möglichkeit, Text in ein (ziemlich komisch benanntes) Website-Element einzutragen.
    Ok, das Prinzip bleibt das gleiche. Auf einer Testseite probieren und dann in Dein Programm einbauen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also es geht um Die Seite
    Da kann ich auch nur den "Einloggen" Button Drücken,

    Mein Code für den Button:

    C#-Quellcode

    1. webView21.ExecuteScriptAsync("document.getElementsByClassName('sc-bczRLJ gNPlOm')[5].click();");


    - aber selbst da die zwei TextBoxen:
    (konnte ich soweit als ID oder auch als Class rausfiltern im Quelltext:)

    ID:
    - Nickname:

    HTML-Quellcode

    1. login-input-username

    - Passwort:

    HTML-Quellcode

    1. login-input-password


    Class:
    - Nickname:

    HTML-Quellcode

    1. InputField__input___3D9_0

    - Passwort:

    HTML-Quellcode

    1. InputField__input___3D9_0


    Code als (ID) in C#

    C#-Quellcode

    1. webView21.ExecuteScriptAsync("document.getElementById(login-input-username" + email.Text);
    2. webView21.ExecuteScriptAsync("document.getElementById(login-input-password)" + pass.Text);


    aber auch selbst wenn ich auf die Class zugreife Grabt er den Text nicht in die TextBox!? warum?!

    Code als (Class) in C#

    C#-Quellcode

    1. webView21.ExecuteScriptAsync("document.getElementsByClassName('InputField__input___3D9_0')" + email.Text);
    2. webView21.ExecuteScriptAsync("document.getElementsByClassName('InputField__input___3D9_0')" + pass.Text);


    So ich hoffe jetzt konnte ich es für euch besser simulieren bzw was mein problem zurzeit an diesem Projekt ist, bin da schon seid einer Woche dran, bekomme davon echt schon langsam Kopfschmerzen :D

    Lg getsha
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „getsha“ ()

    Ich denke, du solltest dir mal XAMPP installieren. Dann baust du mal eine kleine Webseite mit JavaScript funktionalitäten(muss ja nicht großes sein). Mann kann nur mit Sachen arbeiten die man versteht, sonst verschwendet man sehr viel Zeit, die man besser ins lernen investieren sollte. Kannst du die JS-Grundlagen, kannst du das sicherlich mit weniger Kopfschmerzen schaffen.

    Das hier:
    document.getElementsByClassName('InputField__input___3D9_0')" + email.Text
    Ist kein funktionierender JS Code. Du versuchst ein Element zu ermitteln und wills da einen Text anhängen, das was du da versuchst würde in VB so aussehen, das kann ja nicht gut gehen:
    Dim tb as TextBox = TextBox1 + "ghwedfuiweifrg"
    Da würde der Kompiler auch meckern oder nicht?

    Du kannst es dir aber auch ein wenig leichter machen, installiere Notepad++(Guter Texteditor mit Syntax-Highlight), oder VS Code falls du auch Intellisense nutzen willst, lege .js Dateien an. Schreibe dort deinen JS Code rein, die Datei einlesen und den String der Funktion mitgeben. Tip: Platzhalter nutzen! Die Platzhalter dann mit dem Text der zu nutzen ist ersetzen.

    So holst du dir dann ein Element und verwendest es. Oft kommt man mit einer Zeile nicht aus, von daher finde ich JS-Dateien einlesen besser als wie nur so einen fixen String im Code zu haben. Dann musst du nicht mal neu kompilieren, falls die Webseite mal ein Update bekommt und ID- und Class- Attribute sich geändert haben.

    Quellcode

    1. const theLoginElement = document.getElementById("login-input-username");
    2. theLoginElement.click();

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „DTF“ ()