Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: tincopasan en 3 Junio 2017, 06:47 am



Título: obtener dato de controles en paginas web con vb.net
Publicado por: tincopasan en 3 Junio 2017, 06:47 am
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
  1. <input onkeydown="checkKeyDown(event.keyCode)" name="textfield">
  2.  
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?


Título: Re: obtener dato de controles en paginas web con vb.net
Publicado por: Eleкtro en 3 Junio 2017, 21:00 pm
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
  1. ...
  2. </tr><tr class="windowbg">
  3. <td width="50%" align="right"><b>Usuario:</b></td>
  4. <td><input type="text" name="user" size="20" value=""/></td>
  5. </tr><tr class="windowbg">
  6. <td align="right"><b>Contrase&ntilde;a:</b></td>
  7. <td><input type="password" name="passwrd" value="" size="20"/></td>
  8. ...

Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Private ReadOnly uri As New Uri("http://foro.elhacker.net/login.html")
  4.  
  5.    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
  6.        Me.WebBrowser1.Navigate(uri)
  7.    End Sub
  8.  
  9.    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
  10.  
  11.        Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
  12.  
  13.        If (wb.Document.Forms.Count = 0) OrElse (wb.Url <> Me.uri) Then
  14.            Exit Sub
  15.        End If
  16.  
  17.        Dim doc As HtmlDocument = wb.Document
  18.        Dim form As HtmlElement = doc.Forms(0)
  19.        Dim user As HtmlElement = doc.GetElementById("user")
  20.        Dim passwrd As HtmlElement = doc.GetElementById("passwrd")
  21.  
  22.        user?.SetAttribute("value", "My Username")
  23.        passwrd?.SetAttribute("value", "My Password")
  24.        form.InvokeMember("Submit")
  25.  
  26.    End Sub
  27.  
  28. End Class

Y para obtener el valor de un attributo puedes hacerlo de la siguiente manera siguiendo el ejemplo de arriba:

Código
  1. Dim attribSize As String = user.GetAttribute("size") ' 20
  2. 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!


Título: Re: obtener dato de controles en paginas web con vb.net
Publicado por: tincopasan en 4 Junio 2017, 01:29 am
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