obtener dato de controles en paginas web con vb.net

Iniciado por tincopasan, 3 Junio 2017, 06:47 AM

0 Miembros y 1 Visitante están viendo este tema.

tincopasan

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:
Código (html4strict) [Seleccionar]
<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?

Eleкtro

#1
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 :

Código (html4strict) [Seleccionar]
...
</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&ntilde;a:</b></td>
<td><input type="password" name="passwrd" value="" size="20"/></td>
...


Código (vbnet) [Seleccionar]
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:

Código (vbnet) [Seleccionar]
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!








tincopasan

Elektro:
             Muchas Gracias por responder! ya probaré lo que has enseñado! en cuanto al lenguaje por la sintaxis, tampoco es tanto problema ya que basicamente es parecida a vb 6 que si he usado más, prefiero aprendar más de vb.net por ahora, c y c++ lo uso solo para simples programas sin entorno visual para que pesen poco.
Nuevamente gracias por desburrarme!
Saludos