Descarga desde WebBrowser

Iniciado por Dragonatak, 28 Octubre 2011, 09:46 AM

0 Miembros y 2 Visitantes están viendo este tema.

Dragonatak


Saludos:

Mi problema es este, estoy realizando una aplicación en la que entro a una página que pide login y password, postriormente necesito ingresar a un link para que me envíe a la siguiente pantalla, una vez que cargó toda la nueva pagina, la cual contiene una tabla con hypervinculos en forma de imagen de boton para descaragar los archivos que necesito.

Ya tengo todo el acceso hasta la 3er pantalla y las cadenas cortadas para sus descargas, pero al tratar de descargar los archivos estos se bajan incompletos, con:

My.Computer.Network.DownloadFile me terminan pesando menos de 1Kb
Y con objWebClient = New System.Net.WebClient
         objWebClient.DownloadFile
Me descarga hasta 3 Kb.

Ya etsuve leyendo mucho e intentando varias cosas pero aún no logro que los archivos se descarguen completos.

Mi pregunta es existe alguna forma de descargarlos de la página que se argo en el WebBrowser???, de antemano gracias por su ayuda!! =)

s00rk

A mi parecer es que talves esta mal hecho los parametros para descargar, ya que si descarga solo 1 kb es raro, seria incompleto si descargara & que le faltaran unos kb's o algo asi.

Pero bueno tambien puedes descargar parte por parte en bytes, yo uso una clase llamada DownloadFilesWithProgressBar en Google la encuentras facil hehehe

Suerte n_n

seba123neo

podes poner cual es la pagina web ?
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Dragonatak


Saludos:

Antes que nada les doy las gracias por responderme, les comento en lo que voy con esto, efectivamente o al menos eso creo, que como comentas s00rk estaba planteando mal al descarga, puesto que estaba accesando a las páginas atravez del webbrowser, pero después pedía la descargas de los archivos con las sentencias Downloadfile y objWebClient.Downloadfile; por lo que se me impedía la descarga de los archivos y supongo que solo se generaba el archivo.

Al pensar en ello se me ocurrió tratar de descargarlo desde el Webbrowser, estuve buscando pero no existe algo tal cual para hacerlo, así que utilizando

WebBrowser2.Navigate

pude llegar a los archivos, ahora mi problema es la ventana de save as y que todo se haga automático.

Lo que estoy haciendo es mandar un tiempo de espera de 5 segundos entre archivo y archivo y después enviarle tabs y enter's, pero o no lo hace o se traba, que pueden recomendarme????????

Por cierto la página Seba123neo es:

http://www.masteredi.com.mx

al entrar con el user y el pass pasa a una página donde te pide que deseas realizar con hipervínculos, y ahí se debe de presionar la liga de archivos nuevos y en la siguiente págian que es la que interesa hacer la descarga de todos los archivos. La clave es 1809

Dragonatak

Saludos:

He seguido con esto y el problema sigue siendo el mismo me genera 1 sola ventana de descarga después de hacer la petición de todos los hipervinculos que se deberían de descargar. Pero lo que no logro es como decirle que se guarde cuando se presenta el cuadro de Dialogo Guardar Como, les comento he intentado inmediatamente después de la petición de navegación y que se debería de generar la descarga los Enter's y Tab's y no lo hace, enviando el foco al form al terminar la Subrutina e igual nada, por favor échenme la mano, de antemano gracias.

Dragonatak

Ya tuve un nuevo avance, lo que hice fue separarlo por subrutinas, la de la obtención de cadenas, la de la descarga y la importante por así decirlo y que creo que es la que me ha ayudado, la del Timer.

Cada 10 seg's me descarga un archivo diferente, ya me aparecen las ventanas de guardado consecutivas, ahora mi problema es el control de las mismas, si conocen algún método de manejo o alguna recomendación se agradece muchísimo, de cualquier forma, comento si hay algún nuevo avance, saludos.

seba123neo

Hola, despues te publico lo que pude hacer, paciencia, pero te ahorras muchisimo codigo con lo que hice yo, desde ya te digo.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

seba123neo

Hola, despues te publico lo que pude hacer, paciencia, pero te ahorras muchisimo codigo con lo que hice yo, desde ya te digo.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

seba123neo

bueno mira, hice un codigo asi nomas para mostrarte como seria.

para loguearte en la web podes hacerlo de 2 formas: una es completando en el webbrowser los controles textbox desde el codigo, como estas haciendo vos.

pero la otra que es mas corta y te evitas hacer eso, es directamente con la direccion URL...me pude fijar que cuando uno se loguea en esa web en el metodo POST que realiza, envia una cabecera con el nombre de usuario y contraseña, o sea que no necesitas completar los controles, sino directamente hacerlo desde la URL.

por ejemplo, si haces esto:

Código (vbnet) [Seleccionar]
WebBrowser1.Navigate("http://www.masteredi.com.mx/realdata/login.asp?email=" & "1809" & "&password=" & "1809" & "&btnLogin=Entrar")

con eso te logueas en la web.

este es el codigo final,necesitas un webbrowser un boton y un listbox en el formulario, los nombres por defecto.

Código (vbnet) [Seleccionar]
Imports System.Net
Imports HtmlAgilityPack
Imports System.Text.RegularExpressions

Public Class Form1

    Private vAccion As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        vAccion = "LOGIN"
        WebBrowser1.Navigate("http://www.masteredi.com.mx/realdata/login.asp?email=" & "1809" & "&password=" & "1809" & "&btnLogin=Entrar")
    End Sub

    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

            Select Case vAccion
                Case "LOGIN"
                    Threading.Thread.Sleep(5000)
                    vAccion = "LINKS"
                    WebBrowser1.Navigate("http://www.masteredi.com.mx/masteredi/archivosn.asp?intRegGen=")
                Case "LINKS"
                    Call ExtraerLinks(WebBrowser1.Document.Body.OuterHtml)
            End Select

        End If
    End Sub

    Private Sub WebBrowser1_ProgressChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles WebBrowser1.ProgressChanged
        Me.Text = "Cargado " & (e.CurrentProgress / 10000) & " %"
    End Sub

    Private Sub ExtraerLinks(ByVal pCodigoHTML As String)

        Dim vDocumento As New HtmlDocument
        vDocumento.LoadHtml(pCodigoHTML)

        For Each vLink As HtmlNode In vDocumento.DocumentNode.SelectNodes("//a[@href]")
            If vLink.Attributes("href").Value.ToString.EndsWith(".exe") Then
                ListBox1.Items.Add(vLink.Attributes("href").Value.ToString)
            End If
        Next
    End Sub
End Class


te explico un poco lo que hace:

1 - al apretar el boton se loguea en la web mediante la URL.

2 - cuando se completa la carga de la pagina, navega hacia la direccion donde estan los archivos a bajar.

3 - y cuando termina de cargarse la pagina con los archivos, son como 800, tarda unos minutos. lo que hace es parsear el codigo HTML de la pagina, y extrae los links que haya.

4 - para parsear los links podes usar varias formas, expresiones regualares o tabmein la libreria que use en este ejemplo que es buenisima, se llama Html Agility Pack ahi podes bajar la libreria dll y agregarla al proyecto como referencia.

5 - lo que hace es extraer los links de la pagina, al extraerlos te devuelve algo como esto:

Citar/masteredi/Default.asp
default.asp
muestra.asp?archivo=02-001809-20110907_616048-001-ORD_COMPRA.log
/masteredi/bajar.asp?archivo=02-001809-20110907_616048-001-ORD_COMPRA.EXE
/masteredi/mail.asp?archivo=/data/1809/02-001809-20110907_616048-001-ORD_COMPRA.EXE&log=1809/02-001809-20110907_616048-001-ORD_COMPRA
/masteredi/bajar.asp?archivo=02-001809-20110907_616048-001-ORD_COMPRA.ZIP
muestrac.asp?archivo=02-001809-20110907_616048-001-ORD_COMPRA.inw
/masteredi/viejosconf.asp?archivo=1809/02-001809-20110907_616048-001-ORD_COMPRA
muestra.asp?archivo=02-001809-20110907_616049-004-DEVOLUCION.log
/masteredi/bajar.asp?archivo=02-001809-20110907_616049-004-DEVOLUCION.EXE
/masteredi/mail.asp?archivo=/data/1809/02-001809-20110907_616049-004-DEVOLUCION.EXE&log=1809/02-001809-20110907_616049-004-DEVOLUCION
/masteredi/bajar.asp?archivo=02-001809-20110907_616049-004-DEVOLUCION.ZIP
muestrac.asp?archivo=02-001809-20110907_616049-004-DEVOLUCION.inw
/masteredi/viejosconf.asp?archivo=1809/02-001809-20110907_616049-004-DEVOLUCION
muestra.asp?archivo=09-001809-20110907_555655-998-APERAK.log
/masteredi/bajar.asp?archivo=09-001809-20110907_555655-998-APERAK.EXE
/masteredi/mail.asp?archivo=/data/1809/09-001809-20110907_555655-998-APERAK.EXE&log=1809/09-001809-20110907_555655-998-APERAK
/masteredi/bajar.asp?archivo=09-001809-20110907_555655-998-APERAK.ZIP
muestrac.asp?archivo=09-001809-20110907_555655-998-APERAK.inw
/masteredi/viejosconf.asp?archivo=1809/09-001809-20110907_555655-998-APERAK
muestra.asp?archivo=09-001809-20110907_555729-998-APERAK.log
/masteredi/bajar.asp?archivo=09-001809-20110907_555729-998-APERAK.EXE
/masteredi/mail.asp?archivo=/data/1809/09-001809-20110907_555729-998-APERAK.EXE&log=1809/09-001809-20110907_555729-998-APERAK
/masteredi/bajar.asp?archivo=09-001809-20110907_555729-998-APERAK.ZIP
muestrac.asp?archivo=09-001809-20110907_555729-998-APERAK.inw
/masteredi/viejosconf.asp?archivo=1809/09-001809-20110907_555729-998-APERAK
muestra.asp?archivo=09-001809-20110907_556003-998-APERAK.log
/masteredi/bajar.asp?archivo=09-001809-20110907_556003-998-APERAK.EXE
/masteredi/mail.asp?archivo=/data/1809/09-001809-20110907_556003-998-APERAK.EXE&log=1809/09-001809-20110907_556003-998-APERAK
/masteredi/bajar.asp?archivo=09-001809-20110907_556003-998-APERAK.ZIP
muestrac.asp?archivo=09-001809-20110907_556003-998-APERAK.inw
/masteredi/viejosconf.asp?archivo=1809/09-001809-20110907_556003-998-APERAK
muestra.asp?archivo=09-001809-20110907_556004-001-ORD_COMPRA.log
/masteredi/bajar.asp?archivo=09-001809-20110907_556004-001-ORD_COMPRA.EXE
/masteredi/mail.asp?archivo=/data/1809/09-001809-20110907_556004-001-ORD_COMPRA.EXE&log=1809/09-001809-20110907_556004-001-ORD_COMPRA
/masteredi/bajar.asp?archivo=09-001809-20110907_556004-001-ORD_COMPRA.ZIP
muestrac.asp?archivo=09-001809-20110907_556004-001-ORD_COMPRA.inw
/masteredi/viejosconf.asp?archivo=1809/09-001809-20110907_556004-001-ORD_COMPRA
muestra.asp?archivo=09-001809-20110907_556157-001-ORD_COMPRA.log
/masteredi/bajar.asp?archivo=09-001809-20110907_556157-001-ORD_COMPRA.EXE
/masteredi/mail.asp?archivo=/data/1809/09-001809-20110907_556157-001-ORD_COMPRA.EXE&log=1809/09-001809-20110907_556157-001-ORD_COMPRA
/masteredi/bajar.asp?archivo=09-001809-20110907_556157-001-ORD_COMPRA.ZIP
muestrac.asp?archivo=09-001809-20110907_556157-001-ORD_COMPRA.inw
/masteredi/viejosconf.asp?archivo=1809/09-001809-20110907_556157-001-ORD_COMPRA
muestra.asp?archivo=09-001809-20110907_556214-001-ORD_COMPRA.log
/masteredi/bajar.asp?archivo=09-001809-20110907_556214-001-ORD_COMPRA.EXE
/masteredi/mail.asp?archivo=/data/1809/09-001809-20110907_556214-001-ORD_COMPRA.EXE&log=1809/09-001809-20110907_556214-001-ORD_COMPRA
/masteredi/bajar.asp?archivo=09-001809-20110907_556214-001-ORD_COMPRA.ZIP
muestrac.asp?archivo=09-001809-20110907_556214-001-ORD_COMPRA.inw
/masteredi/viejosconf.asp?archivo=1809/09-001809-20110907_556214-001-ORD_COMPRA
muestra.asp?archivo=09-001809-20110907_556215-001-ORD_COMPRA.log
/masteredi/bajar.asp?archivo=09-001809-20110907_556215-001-ORD_COMPRA.EXE
/masteredi/mail.asp?archivo=/data/1809/09-001809-20110907_556215-001-ORD_COMPRA.EXE&log=1809/09-001809-20110907_556215-001-ORD_COMPRA
/masteredi/bajar.asp?archivo=09-001809-20110907_556215-001-ORD_COMPRA.ZIP
muestrac.asp?archivo=09-001809-20110907_556215-001-ORD_COMPRA.inw
/masteredi/viejosconf.asp?archivo=1809/09-001809-20110907_556215-001-ORD_COMPRA
muestra.asp?archivo=16-001809-20110907_005072-001-ORD_COMPRA.log
/masteredi/bajar.asp?archivo=16-001809-20110907_005072-001-ORD_COMPRA.EXE
/masteredi/mail.asp?archivo=/data/1809/16-001809-20110907_005072-001-ORD_COMPRA.EXE&log=1809/16-001809-20110907_005072-001-ORD_COMPRA
/masteredi/bajar.asp?archivo=16-001809-20110907_005072-001-ORD_COMPRA.ZIP
muestrac.asp?archivo=16-001809-20110907_005072-001-ORD_COMPRA.inw
/masteredi/viejosconf.asp?archivo=1809/16-001809-20110907_005072-001-ORD_COMPRA
muestra.asp?archivo=28-001809-20110907_085078-997-CONTRL.log
/masteredi/bajar.asp?archivo=28-001809-20110907_085078-997-CONTRL.EXE
/masteredi/mail.asp?archivo=/data/1809/28-001809-20110907_085078-997-CONTRL.EXE&log=1809/28-001809-20110907_085078-997-CONTRL
/masteredi/bajar.asp?archivo=28-001809-20110907_085078-997-CONTRL.ZIP
muestrac.asp?archivo=28-001809-20110907_085078-997-CONTRL.inw
/masteredi/viejosconf.asp?archivo=1809/28-001809-20110907_085078-997-CONTRL
muestra.asp?archivo=28-001809-20110907_085084-001-ORD_COMPRA.log
/masteredi/bajar.asp?archivo=28-001809-20110907_085084-001-ORD_COMPRA.EXE
/masteredi/mail.asp?archivo=/data/1809/28-001809-20110907_085084-001-ORD_COMPRA.EXE&log=1809/28-001809-20110907_085084-001-ORD_COMPRA
/masteredi/bajar.asp?archivo=28-001809-20110907_085084-001-ORD_COMPRA.ZIP
muestrac.asp?archivo=28-001809-20110907_085084-001-ORD_COMPRA.inw
/masteredi/viejosconf.asp?archivo=1809/28-001809-20110907_085084-001-ORD_COMPRA
muestra.asp?archivo=09-001809-20110908_556258-998-APERAK.log
/masteredi/bajar.asp?archivo=09-001809-20110908_556258-998-APERAK.EXE
/masteredi/mail.asp?archivo=/data/1809/09-001809-20110908_556258-998-APERAK.EXE&log=1809/09-001809-20110908_556258-998-APERAK
/masteredi/bajar.asp?archivo=09-001809-20110908_556258-998-APERAK.ZIP
muestrac.asp?archivo=09-001809-20110908_556258-998-APERAK.inw

como ves hay links que no sirven, y por eso despues filtra solo los que terminan en ".exe" que son los que vos necesitas.

y listo, solo te queda ponerte a bajar cada archivo, lo podes hacer con WebClient o de varias formas.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Dragonatak


Muchas Gracias!!!! =D

Tenías razón te ahorraste un buen de código. Ahora solo me queda la duda con la descarga, WebClient nunca lo he utilizado, ya estoy investigandole para ver como funciona. Como me recomiendas que la haga????? o cual método crees que me sería mucho más efectivo para la descarga automática????

También ya me bajé el HTML Agility Pack, ahorita estoy con ello.

Nuevamente muchas gracias, ahorita voy a estar con lo de la descarga, en cuanto tenga algo, posteo. Nuevamente gracias, por favor espero puedas asesorarme nuevamente con la descarga, gracias.