Ich habe schon seit einiger Zeit versucht, herauszufinden, wie ich das machen soll. Ich möchte den Formularklassennamen von "live_" finden, den ich mit dem untenstehenden Code gut machen kann, aber ich bin unsicher, wie man einen Textwert innerhalb dieses Formular-Tags bekommt , ohne den ganzen Code durchzulaufen und jeden anderen Text zu bekommen Wert auf der Seite.
Ich benutze ein Webbrowser-Steuerelement auf meiner Winform.
Der Code, den ich bekommen muss, ist das:
Dim theElementCollection As HtmlElementCollection = Nothing
theElementCollection = wbNewsFeed.Document.GetElementsByTagName("form")
For Each curElement As HtmlElement In theElementCollection
If curElement.GetAttribute("className").ToLower.Contains("live_") Then
Dim theID As String = curElement.GetAttribute("data-live")
End If
Next
Der obige Code wird solange durchlaufen, bis auf dieser Seite keine Form-Tags mehr gefunden werden. Wenn es ein Formular-Tag findet, dann sieht es aus, ob dieses Formular-Tag einen Klassennamen von live_ in irgendeinem Teil seines Namens enthält. Dieser Code funktioniert einwandfrei und findet alle Formular-Tags dieser Klasse. Einige Form-Tags haben jedoch immer noch diese Klasse, aber kein Textfeld, nach dem ich auch nur innerhalb dieses Form-Tags suchen möchte.
Das HTML sieht ähnlich aus:
<form class="live_574bf67566_58vvifkfkyu5237 commentable expand_mode" id="0_f"
onsubmit="return window.Event &&" action="change.php" method="post"
data-ft='{"ge":"]"}' rel="async" data-live='{"seq":"574bf67566_1857067654230"}'>
<input name="charset_test" type="hidden" value="6,52g,6b88">
<input name="fb_dtsg" type="hidden" value="AQB4SLmU" autocomplete="off">
[LOT of code here....]
<input class="hiddenInput" type="hidden" autocomplete="off" data-id="785fgj67-774">
<div class="innerWrap" data-reactid=".1l.1:4.0.$right.0.0.0.0.1.0.1">
<textarea name="add_comment_text" title="Write a comment..." class="textInput mentions" placeholder="Write a comment..." value="Write a comment..." data-id="57-986-gn-52">Write a comment...</textarea>
</div>
[some more code here]
</form>
Meine Frage ist also: Wie gehe ich nur durch diesen aktuellen Formular-Tag-Bereich und finde heraus , ob es dieses Textfeld hat (.GetAttribute ("title"). ToString.ToLower = "Schreibe einen Kommentar ...") ?
Ich habe Folgendes versucht:
Dim theElementCollection2 As HtmlElementCollection = Nothing
For Each curElement As HtmlElement In theElementCollection
If curElement.GetAttribute("className").ToLower.Contains("live_") Then
Dim theID As String = curElement.GetAttribute("data-live")
theElementCollection2 = curElement.Document.GetElementsByTagName("textarea")
For Each curElement2 As HtmlElement In theElementCollection2
Debug.Print(curElement2.GetAttribute("title").ToLower.ToString)
If curElement2.GetAttribute("title").ToLower.ToString = "write a comment..." Then
Debug.Print("Found! " & curElement2.GetAttribute("name"))
End If
Next
End If
Next
Aber das scheint nur die ganze html-Seite durchzulaufen ...
Danke für deine Zeit und Hilfe!
Scheint so, als müsstest du:
curElement.Children.GetElementsByName("add_comment_text")(0)