Disculpa el atrevimiento compañero pero yo intuyo que no te debe ser muy satisfactorio usar
VB.NET, me refiero, ¿no te sería de mayor utilidad usar
C# por las similitudes sintácticas con
Python?.
Por lo que creo haber entendido, estás intentando rellenar los datos de un formulario web de forma "visual" y automatizada mediante el control
WebBrowser y no encuentras un identificador que te sirva para identificar un control en específico. Pues bien, en teoría deberías poder utilizar el valor del atributo "
name" como identificador (es decir, el string "
textfield" en el código que mostraste).
Te muestro un ejemplo completo con la página de login de
http://foro.elhacker.net :
...
</tr><tr class="windowbg"> <td width="50%" align="right"><b>Usuario:
</b></td> <td><input type="text" name="user" size="20" value=""/></td> </tr><tr class="windowbg"> <td align="right"><b>Contrase
ña:
</b></td> <td><input type="password" name="passwrd" value="" size="20"/></td> ...
Public NotInheritable Class Form1 : Inherits Form
Private ReadOnly uri As New Uri("http://foro.elhacker.net/login.html")
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Me.WebBrowser1.Navigate(uri)
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
If (wb.Document.Forms.Count = 0) OrElse (wb.Url <> Me.uri) Then
Exit Sub
End If
Dim doc As HtmlDocument = wb.Document
Dim form As HtmlElement = doc.Forms(0)
Dim user As HtmlElement = doc.GetElementById("user")
Dim passwrd As HtmlElement = doc.GetElementById("passwrd")
user?.SetAttribute("value", "My Username")
passwrd?.SetAttribute("value", "My Password")
form.InvokeMember("Submit")
End Sub
End Class
Y para obtener el valor de un attributo puedes hacerlo de la siguiente manera siguiendo el ejemplo de arriba:
Dim attribSize As String = user.GetAttribute("size") ' 20
Dim attribType As String = user.GetAttribute("type") ' text
Si quieres algo más sofisticado a la hora de parsear, entonces es MUY recomendable utilizar la librería de terceros
HtmlAgilityPack para .NET.
...O en su defecto puedes importar la librería
MSHTML y usar sus interfaces (las clases
System.Windows.Forms.HtmlDocument /
HtmlDomDocument /
HtmlElement y etcétera son wrappers de los miembros/interfaces expuestos en
MSHTML) pero estos miembros no están muy documentados en la referencia online de la MSDN, así que dependiendo de para qué, sería un poco ir a ciegas.
Saludos!