estoy intentando completar los datos de una página web por medio de webBrowser, no tengo idea de este lenguaje,salvo lo básico(siempre lo hago con python), así que busqué en la red, el problema es que lo que encontré es acceso por medio del id y resulta que la página que miro el textbox tiene:
<input onkeydown="checkKeyDown(event.keyCode)" name="textfield">
nada de id!!! ¿cómo obtengo acceso a completar o leer ese control?
de paso, perdón por la ignorancia ¿de dónde se obtiene información sobre las propiedades de los controles?
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.
- https://github.com/jstedfast/HtmlAgilityPack
...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!