Laden...

C# Html-input-Felder auslesen

Erstellt von newsletter vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.116 Views
N
newsletter Themenstarter:in
7 Beiträge seit 2018
vor 6 Jahren
C# Html-input-Felder auslesen

Moin,

Ich habe in meiner Form einen Webbrowser integriert.
Dieser ladet eine Webseite und soll nun die einzelnen Textboxen/Input-Felder auslesen.

Das Einfügen funktioniert problemlos:


webBrowser1.Document.All["firstname"].SetAttribute("value", Txtfirstname.Text);

Wie geht das auslesen/umgekehrt?

Bin bereits mehrere Stunden damit beschäftigt aber irgendwie klappt das nicht...

So sieht das Html-Dokument aus:


Vorname:
<input type="text" class="form-control input-250 name="fristname" value="Hans" tabindex="1">
Nachname:
<input type="text" class="form-control input-250 name="lastname" value="Meier" tabindex="2">
Adresse:
<input type="text" class="form-control input-250 name="address" value="Hansmeierstrasse 12" tabindex="8">
...

Hoffe mir kann hier jemand helfen ...

Besten Dank für jede Hilfe.

N
newsletter Themenstarter:in
7 Beiträge seit 2018
vor 6 Jahren

Habe ich bereits ausprobiert:


HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("form-control input-250");

            foreach (HtmlElement elem in elems)
            {

                String nameStr = elem.GetAttribute("firstname");
                MessageBox.Show(nameStr);
                
            }

elems ist leer 🤔

4.939 Beiträge seit 2008
vor 6 Jahren

Und


string text = webBrowser1.Document.All["firstname"].GetAttribute("value");

?

35 Beiträge seit 2015
vor 6 Jahren

Hey newsletter,

ich kann dir zwar bei deinem Problem nicht direkt weiter helfen aber ich habe gesehen, dass in deiner .xml Datei die Anführungszeichen falsch gesetzt sind:

  
Vorname:  
<input type="text" class="form-control input-250 name="fristname" value="Hans" tabindex="1">  
[...]  
  

Das würde ja laut deiner .xml bedeuten, dass **class **gleich "form-control input-250 name=" ist.
Ist hier lediglich dein Zitat falsch oder auch dein Code?

Gruß
Eniplay

Why do java programmers wear glasses?
Because they can't see sharp

N
newsletter Themenstarter:in
7 Beiträge seit 2018
vor 6 Jahren

Vielen Dank für eure Hilfe es hat nun geklappt 😄 hab nen array von 34. Gibt es evtl. Ne möglichkeit, dass diese bisschen besser sortiert rauskommt?

Nunja, kann auf jedenfall nun damit arbeiten

16.835 Beiträge seit 2008
vor 6 Jahren

Les mal Deinen Text und frag Dich dann, ob Du verstehst, wovon Du selbst sprichst 🤔

N
newsletter Themenstarter:in
7 Beiträge seit 2018
vor 6 Jahren

Moin,

Ich meine sowas:


private void Cmduebernehm_Click(object sender, EventArgs e)
        {

            HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("INPUT");

            foreach (HtmlElement elem in elems)
            {

                String nameStr = elem.GetAttribute("value");

                MessageBox.Show(nameStr);
            }
}

Nun zeigt mir nameStr in der Messagebox insg. 34 Werte nacheinander an.

Diese Werte möchte ich aber einzeln wie ein Array in Textboxen abfüllen:

nameStr[0] => Vorname ---> Vorname.Text
nameStr[5] => Nachname --> Nachname.Text

etc... und gewisse Werte von den 34 garnicht berücksichtigen...

🤔

3.003 Beiträge seit 2006
vor 6 Jahren

Dein Code kennt zwar die Namen deiner Textboxes, aber nicht ihre Bedeutung. Genauso kennt er auch die Bedeutung der ausgelesenen INPUT-Elemente nicht - das musst du ihm schon beibringen.

Eine schnelle Möglichkeit dazu:


public class ExampleController : INotifyPropertyChanged
{
    private string _givenName;
    private string _familyName;
    
    public string GivenName 
    {
        get { retzurn _givenName; }
        set 
        {
             _familyName = value;
             OnPropertyChanged(nameof(FamilyName));
        }
    }
    public string FamilyName
    {
        get { retzurn _familyName; }
        set 
        {
             _familyName = value;
             OnPropertyChanged(nameof(FamilyName));
        }
    }

    public void Initialize(IEnumerable<HtmlElement> inputElements)
    {
         GivenName = inputElements[0];
         FamilyName = inputElements[5];
    }
}

public class MyForm:Form
{
    public void InitController(ExampleController controller) 
    {
         textbox1.DataBindings.Add("Text", controller, "GivenName");
         textbox2.DataBindings.Add("Text", controller, "FamilyName");

        HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("INPUT");
        controller.Initialize(elems);
    }
}

Durch die Initialize()-Methode ordnest du einzelnen Inputs eine Bedeutung zu und speicherst sie, und durch das Binden an den Controller, der die gespeicherten Werte hält, gibst du den Textboxes eine Bedeutung.

Ist nur eine Schablone, ich würde von copy&paste absehen 😉.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

N
newsletter Themenstarter:in
7 Beiträge seit 2018
vor 6 Jahren

Uff... geht das nicht einfacher 🤔
kenne mich nicht sonderlich gut mit solchen Listen aus ... brauche ich auch höchstselten 🙁

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

wenn ich das in der Doku richtig gefunden habe gibt es äquivalent zur SetAtrribute-Methode auch eine GetAttribute-Methode.

Also:


MeineTextbox.Text = webBrowser1.Document.All["firstname"].GetAttribute("value");

LG

3.003 Beiträge seit 2006
vor 6 Jahren

Dir ist schon klar, dass das Beispiel da oben nur 3-5 Zeilen wirklichen Code enthält und der Rest ein paar Deklarationen sind? Anders ausgedrückt: nee, noch einfacher wird's nicht.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)