elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Clase y propiedades con Webbrowser
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Clase y propiedades con Webbrowser  (Leído 893 veces)
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Clase y propiedades con Webbrowser
« en: 29 Noviembre 2015, 14:25 »

Hi

Lo que intento es lo siguiente:
-Obtengo código fuente de una página y lo cargo en A
-Cargo la página en el Webbrowser:  WB.DocumentText= A
-Cuando cargue la página llama al evento ReadWeb
-ReadWeb obtiene datos en modo lista y lo Carga en una variable List
-Desde Button_Click llamo a la clase  e intento obtener dicha lista.

Problema: No puedo obtener dicha lista.

Código
  1. Class clsGetDataWeb
  2.    Dim Lista As New List(Of String)
  3.    Dim WB As New WebBrowser
  4.    Dim strUrl As String = "http://www...."
  5.    Dim WebSource As String = Nothing
  6.  
  7.  
  8.    Public Sub GetDataWeb()
  9.  
  10.        '//OBTIENE EL CÓDIGO FUENTE DE LA PÁGINA
  11.        Try
  12.            WebSource = GetWebSource(strUrl) 'Obtiene el código de la página
  13.        Catch ex As Exception
  14.            MessageBox.Show(ex.Message)
  15.            Exit Sub
  16.        End Try
  17.  
  18.        'LLama al evento DocumentCompletes
  19.        AddHandler WB.DocumentCompleted, AddressOf WB_DocumentCompleted
  20.  
  21.        'Carga el código html en WB
  22.        WB.ScriptErrorsSuppressed = True
  23.        WB.DocumentText = WebSource
  24.  
  25.  
  26.    End Sub
  27.    Private Sub WB_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
  28.            ReadWeb(WB)
  29.    End Sub
  30.    Private Sub ReadWeb(ByVal WBrowser As WebBrowser)
  31.        Dim document As System.Windows.Forms.HtmlDocument = WBrowser.Document
  32.        Dim doc As HtmlDocument = WBrowser.Document
  33.        Dim divs As HtmlElementCollection = doc.GetElementsByTagName("td")
  34.        Lista.Clear()
  35.        For Each div As HtmlElement In divs
  36.            If div.GetAttribute("classname") = "Canción" Then Lista.Add(div.InnerText)
  37.        Next
  38.        Lista= Lista.Distinct.ToList
  39.    End Sub
  40.  
  41.    Private Function GetWebSource(ByVal strUrl As String) As String
  42.           ...AQUÍ CÓDIGO PARA OBTENER EL CÓDIGO FUENTE DE LA PÁGINA WEB
  43. Return CódigoFuente
  44.    End Function
  45.  
  46.    Public ReadOnly Property ParameterNames() As IEnumerable(Of String)
  47.        Get
  48.            Return New List(Of String)(Lista)
  49.        End Get
  50.    End Property
  51.  
  52. End Class
  53.  
  54. #End Region


Y desde el un evento click:

Código
  1. '//Llamo a
  2. Dim ClassDW As New clsGetDataWeb
  3.        ClassDW.GetDataWeb()
  4.        For Each N As String In ClassDW.ParameterNames
  5.            ListBox1.Items.Add(n)
  6.        Next


He constatado por puntos de interrupción que el código de la página lo obtiene y la lista también. Creo que el problema tiene relación con Evento DocumentCompleted y la propiedad Get

parace como si se estableciese la propiedad antes de que se obtenga la lista

Gracias

[SOLUCIONADO]

Era lo que yo pensaba  :-\

Se carga la propiedad antes de que se obtenga la lista. Para solucionarlo he añadido un simple código de espera
Código
  1.    Public ReadOnly Property ParameterNames() As System.Collections.Generic.ICollection(Of String)
  2.        Get
  3.  
  4.            While [LISTA].Count = 0
  5.                My.Application.DoEvents()
  6.            End While
  7.  
  8.            Return New List(Of String)([LISTA])
  9.        End Get
  10.    End Property


« Última modificación: 29 Noviembre 2015, 16:42 por Lekim » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines