Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Dragonatak en 28 Octubre 2011, 09:46 am



Título: Descarga desde WebBrowser
Publicado por: Dragonatak en 28 Octubre 2011, 09:46 am

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!! =)


Título: Re: Descarga desde WebBrowser
Publicado por: s00rk en 28 Octubre 2011, 14:32 pm
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


Título: Re: Descarga desde WebBrowser
Publicado por: seba123neo en 28 Octubre 2011, 14:50 pm
podes poner cual es la pagina web ?


Título: Re: Descarga desde WebBrowser
Publicado por: Dragonatak en 2 Noviembre 2011, 10:02 am

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


Título: Re: Descarga desde WebBrowser
Publicado por: Dragonatak en 3 Noviembre 2011, 04:01 am
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.


Título: Re: Descarga desde WebBrowser
Publicado por: Dragonatak en 3 Noviembre 2011, 10:05 am
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.


Título: Re: Descarga desde WebBrowser
Publicado por: seba123neo en 3 Noviembre 2011, 14:09 pm
Hola, despues te publico lo que pude hacer, paciencia, pero te ahorras muchisimo codigo con lo que hice yo, desde ya te digo.

saludos.


Título: Re: Descarga desde WebBrowser
Publicado por: seba123neo en 3 Noviembre 2011, 14:10 pm
Hola, despues te publico lo que pude hacer, paciencia, pero te ahorras muchisimo codigo con lo que hice yo, desde ya te digo.

saludos.


Título: Re: Descarga desde WebBrowser
Publicado por: seba123neo en 4 Noviembre 2011, 03:07 am
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
  1. 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
  1. Imports System.Net
  2. Imports HtmlAgilityPack
  3. Imports System.Text.RegularExpressions
  4.  
  5. Public Class Form1
  6.  
  7.    Private vAccion As String
  8.  
  9.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  10.        vAccion = "LOGIN"
  11.        WebBrowser1.Navigate("http://www.masteredi.com.mx/realdata/login.asp?email=" & "1809" & "&password=" & "1809" & "&btnLogin=Entrar")
  12.    End Sub
  13.  
  14.    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
  15.        If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
  16.  
  17.            Select Case vAccion
  18.                Case "LOGIN"
  19.                    Threading.Thread.Sleep(5000)
  20.                    vAccion = "LINKS"
  21.                    WebBrowser1.Navigate("http://www.masteredi.com.mx/masteredi/archivosn.asp?intRegGen=")
  22.                Case "LINKS"
  23.                    Call ExtraerLinks(WebBrowser1.Document.Body.OuterHtml)
  24.            End Select
  25.  
  26.        End If
  27.    End Sub
  28.  
  29.    Private Sub WebBrowser1_ProgressChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles WebBrowser1.ProgressChanged
  30.        Me.Text = "Cargado " & (e.CurrentProgress / 10000) & " %"
  31.    End Sub
  32.  
  33.    Private Sub ExtraerLinks(ByVal pCodigoHTML As String)
  34.  
  35.        Dim vDocumento As New HtmlDocument
  36.        vDocumento.LoadHtml(pCodigoHTML)
  37.  
  38.        For Each vLink As HtmlNode In vDocumento.DocumentNode.SelectNodes("//a[@href]")
  39.            If vLink.Attributes("href").Value.ToString.EndsWith(".exe") Then
  40.                ListBox1.Items.Add(vLink.Attributes("href").Value.ToString)
  41.            End If
  42.        Next
  43.    End Sub
  44. 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 (http://htmlagilitypack.codeplex.com/) 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.


Título: Re: Descarga desde WebBrowser
Publicado por: Dragonatak en 4 Noviembre 2011, 03:47 am

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.


Título: Re: Descarga desde WebBrowser
Publicado por: seba123neo en 4 Noviembre 2011, 03:57 am
pues todos esos links del listbox son para mostrarlos nomas, el listbox sacalo, vos lo que tenes que hacer es meter en un array de string esos links y despues recorrer este array e ir descargando de a uno los archivos, busca en internet hay ejemplos de descargar un archivo.

C# Code Snippet - Download File from URL (http://www.digitalcoding.com/Code-Snippets/C-Sharp/C-Code-Snippet-Download-File-from-URL.html)


Título: Re: Descarga desde WebBrowser
Publicado por: Dragonatak en 4 Noviembre 2011, 05:02 am

Hola ya probé con el WebClient y me sigue descargando archivos de 3Kb, eso o solo me está generando el archivo. Tengo lo siguiente:


 For Me.i = val To Var

            Try
                If Me.i <= Var Then
                   
                    ' Hacemos el WebClient.
                    Dim web_client As WebClient = New WebClient

                    web_client.DownloadFile("http://www.masteredi.com.mx/masteredi/bajar.asp?archivo=" & cadenaFinal(Me.i) & ".EXE", "C:\Edi1\DATOS\Descargas\" & cadenaFinal(Me.i))

                Else
                    Exit Sub
                End If

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        Next

Antes también había probado con

My.Computer.Network.DownloadFile

Obteniendo el mismo resultado. Tengo otra pregunta donde coloco el dll del HTML Agility Pack???, disculpa por todas las dudas pero apenas me estoy migrando a .NET de Visual 6, gracias nuevamente