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.
Mittels GetAttribute...
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 🤔
Und
string text = webBrowser1.Document.All["firstname"].GetAttribute("value");
?
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
Und "fristname" ist auch falsch geschrieben.
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
Les mal Deinen Text und frag Dich dann, ob Du verstehst, wovon Du selbst sprichst 🤔
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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...
🤔
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)
Uff... geht das nicht einfacher 🤔
kenne mich nicht sonderlich gut mit solchen Listen aus ... brauche ich auch höchstselten 🙁
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
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)