Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: Elemental Code en 13 Marzo 2012, 01:56 AM

Título: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: Elemental Code en 13 Marzo 2012, 01:56 AM
hola!
Estoy usando un control webbrowser para hacer lo siguiente

Cargar pagina
Obtener codigo fuente
Obtener lo que quiero de ese codigo


y que se repita
osea que vuelva a empezar.

Se hacer todo, pero necesito saber cuando termino de cargar la pagina para saber cuando empezar a trabajar el codigo fuente de la pagina.

Ahora el punto, el control webbrowser tiene eventos como "Download complete" "Document complete" y otras cosas asi.

El problema es que me tira entre 1 y tres eventos por pagina web. y no se porque :D

Hay una forma facil de hacer esto?

NOTA: tengo que usar webbrowser si o si, de otra forma no puedo hacer un paso previo a eso :P
Edito, puede ser un usercontrol de navegador tambien, me refiero a que necesito que el usuario complete unos datos desde un formulario web.

Gracias por su ayuda :D
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: MCKSys Argentina en 13 Marzo 2012, 02:07 AM
Probaste ir mirando el valor de "ProgressChange"?

Por otro lado, creo que el evento correcto es este: http://msdn.microsoft.com/en-us/library/aa768329.aspx (http://msdn.microsoft.com/en-us/library/aa768329.aspx) (Ojo que el control debe estar visible para que se triggeree)

Saludos!
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: Elemental Code en 13 Marzo 2012, 02:15 AM
CitarIn pages where multiple frames are loaded, this event fires for each frame where the DownloadBegin event has fired.

Tendria que probar.
ahora se porque me tiraba varios eventos un solo sitio web.

Voy a tener que probar a ver que eventos se activan y cuando :P

lo del Progresschange hace lo mismo que el anterior. ahora entiendo.
Si tiene un frame carga las cosas separadas y por eso lo muestra asi :P
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: 79137913 en 13 Marzo 2012, 13:24 PM
HOLA!!!

Eventos

Código (visualfoxpro) [Seleccionar]
Private Sub WebBrowser1_DownloadBegin()
ct = ct+1
End Sub

Private Sub WebBrowser1_DownloadComplete()
ct = ct-1
if ct = 0 then finish
End Sub


GRACIAS POR LEER!!!
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: Elemental Code en 13 Marzo 2012, 15:56 PM
GRACIAS!!!

No lo habia pensado :D

Ya mismo lo implemento. :D
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: $Edu$ en 13 Marzo 2012, 16:49 PM
Lo que yo hice una vez cuando me pasaba esto, fue que en el DocumentComplete() verificar si la url que estaba navegando es la que yo queria que termine.
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: webycam en 10 Abril 2012, 20:48 PM
 Yo tenia el mismo problema, el problema esta en que el webbrowser pasa por distintos estados antes de terminar la carga, la solución es esta.
Código (vbnet) [Seleccionar]
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
             Aqui pones el codigo que quieres que se ejecute cuando la pagina este cargada completamente
        End If
    End Sub

Espero que te sirva
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: Elemental Code en 11 Abril 2012, 02:13 AM
Código (vb) [Seleccionar]
If Vb.net then debug.print "Esto es VB6 :P"
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: R2100 en 12 Abril 2012, 18:02 PM
Si la página es tuya, puedes incluir algún texto al final del html y comprobar si existe en cada DownloadComplete(), o StatusTextChange()
Si no lo es, quizá te vale con buscar en en innerhtml el </body>  ó  </html>
Así te evitas los 'falsos positivos' de los iframes, aunque quizá te fallará con los frames.
Depende de la página que estés 'estudiando'



Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: Elemental Code en 13 Abril 2012, 12:01 PM
era la pagina de un servidor de las netbooks EXO de mi escuela.

Ya lo solucione, como la pagina en cuestion no tenia frames me devolvio un solo evento download complete :D
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: fary en 18 Abril 2012, 12:40 PM
Si quieres el código fuente de la página lo mas correcto sería que la descargaras con API  y no haciendo chapuzas con webbrowser  :-\

Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: 79137913 en 18 Abril 2012, 13:19 PM
HOLA!!!

Drinky tiene mucha razon...

Autoria (Seba123Neo)

En un modulo:
Código (vb) [Seleccionar]
Option Explicit
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

Public Const IF_FROM_CACHE = &H1000000
Public Const IF_MAKE_PERSISTENT = &H2000000
Public Const IF_NO_CACHE_WRITE = &H4000000
     
Private Const BUFFER_LEN = 256


Public Function GetUrlSource(sURL As String) As String
    Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
    Dim hInternet As Long, hSession As Long, lReturn As Long

    'get the handle of the current internet connection
    hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
    'get the handle of the url
    If hSession Then hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
    'if we have the handle, then start reading the web page
    If hInternet Then
        'get the first chunk & buffer it.
        iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
        sData = sBuffer
        'if there's more data then keep reading it into the buffer
        Do While lReturn <> 0
            iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
            sData = sData + Mid(sBuffer, 1, lReturn)
        Loop
    End If

    'close the URL
    iResult = InternetCloseHandle(hInternet)

    GetUrlSource = sData
End Function



en un form con un textbox multiline:
Código (vb) [Seleccionar]
Text1.Text = GetUrlSource("http://www.google.com")

GRACIAS POR LEER!!!
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: Elemental Code en 20 Abril 2012, 14:32 PM
lo pense, lo juro.
Pero necesitaba que se loguearan en un principio :P
y no funcionaba haciendo User:pass@dominio
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: LuckyLucciano en 12 Julio 2013, 15:21 PM
Hola a todos, buenos días! Perdón que revivo este thread pero estoy en la misma situación de Elemental Code y estaba tratando de implementar la función que posteo Drinky de autoria de Seba123Neo pero no puedo hacerla funcionar en VB.NET 2008... me tira un error en la declaración de las variables por el aterisco:

Citar* BUFFER_LEN, iResult As Integer, sData As String

Por favor, alguien me puede dar una manito?

Muchisimas gracias de antemano!!!
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: Danyfirex en 12 Julio 2013, 16:01 PM
Cita de: LuckyLucciano en 12 Julio 2013, 15:21 PM
Hola a todos, buenos días! Perdón que revivo este thread pero estoy en la misma situación de Elemental Code y estaba tratando de implementar la función que posteo Drinky de autoria de Seba123Neo pero no puedo hacerla funcionar en VB.NET 2008... me tira un error en la declaración de las variables por el aterisco:

Por favor, alguien me puede dar una manito?

Muchisimas gracias de antemano!!!

creo que seria así:

Código (vbnet) [Seleccionar]
s = New String(" ", 256)
'o
Dim strBuff(256) As Char



saludos
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: LuckyLucciano en 12 Julio 2013, 16:42 PM
Gracias Danyfirex por responder! Lo modifique como me indicaste y no me tira errores con las variables, pero al ejecutar el código me tira error y no logro que funcione  :-[
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: Danyfirex en 12 Julio 2013, 17:06 PM
Cita de: LuckyLucciano en 12 Julio 2013, 16:42 PM
Gracias Danyfirex por responder! Lo modifique como me indicaste y no me tira errores con las variables, pero al ejecutar el código me tira error y no logro que funcione  :-[

de net se lo básico, de igual forma proba esto.

Código (vbnet) [Seleccionar]
  Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
             Aqui pones el codigo que quieres que se ejecute cuando la pagina este cargada completamente
        End If
    End Sub



sino se soluciona crea un tema en la sección de .NET.


saludos
Título: Re: Saber cuando termino de cargar la pagina - Control Webbrowser.
Publicado por: jabm2000 en 21 Noviembre 2013, 11:49 AM
Estoy en la misma situación que LuckyLucciano, probando el codigo que indica Drinky, ¿podeis retomar el tema? Gracias.
He probado todos los codigos que indicais en este tema, y no me funcionan como quisiera, ya que el evento DocumentCompleted, se me lanza, como cinco veces, imagino que seran por los frames que tiene la pagina y lo que me interesa es que la pagina este realmente cargada completa.
Tambien tengo otro problema con el webbrowser... pero eso lo pondre en otro tema.
Nuevamente gracias.