El navegador web GetElementsByTagName realiza un bucle dentro de esa etiqueta

dom getelementsbytagname html-agility-pack vb.net webbrowser-control

Pregunta

He estado intentando averiguar cómo hacer para hacer esto desde hace algún tiempo. Estoy deseando encontrar el nombre de clase de formulario de "live_" que puedo hacer bien con el siguiente código, pero no estoy seguro de cómo obtener un valor de texto dentro de esa etiqueta de formulario sin recorrer todo el código y obtener todos los demás formularios de texto. Valor en la página.

Estoy usando un control de navegador web en mi formulario de Windows.

El código que tengo para obtener la etiqueta de formulario es este:

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

El código anterior actualmente se repite hasta que no encuentra más etiquetas de formulario dentro de esa página. Si encuentra una etiqueta de formulario, busca si esa etiqueta de formulario contiene un nombre de clase de live_ en alguna parte de su nombre. Este código funciona bien y encuentra todas las etiquetas de formulario de esa clase. Sin embargo, algunas etiquetas de formulario todavía tienen esa clase, pero no hay ningún cuadro de texto que también deseo buscar dentro de esa etiqueta de formulario solamente .

El html se parece a esto:

<form class="live_574bf67566_58vvifkfkyu5237 commentable expand_mode" id="0_f" 
 onsubmit="return window.Event &amp;&amp;" 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>

Entonces, mi pregunta es: ¿Cómo hago para ver solo el área de etiqueta de formulario actual y encontrar si tiene ese cuadro de texto (.GetAttribute ("title"). ToString.ToLower = "escribir un comentario ...") ?

He intentado hacer lo siguiente:

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

Pero eso parece que solo recorre toda la página html ...

¡Gracias por tu tiempo y ayuda!

Respuesta popular

Parece que necesitas:

curElement.Children.GetElementsByName("add_comment_text")(0)


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué