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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Navegar con WebBrowser sin alojar archivos en caché
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Navegar con WebBrowser sin alojar archivos en caché  (Leído 4,594 veces)
okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Navegar con WebBrowser sin alojar archivos en caché
« en: 19 Junio 2015, 17:17 pm »

buenas
Me gustaría poder usar WebBrowser sin alojar nada en el caché. Sólo para obtener información de una página como links o código, pero sin alojar, cookies,  imágenes, scripts, etc en el disco. Es decir, que no se descargue nada en disco.

Es posible usar Webbrowser sin crear el control Webbrowser:

Código
  1. Dim WB as new WebBrowser

No se si al utilizar este sistema ser alojan archivos en el disco o no.

Sl2


« Última modificación: 19 Junio 2015, 17:21 pm por okik » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Navegar con WebBrowser sin alojar archivos en caché
« Respuesta #1 en: 19 Junio 2015, 22:23 pm »

Es posible usar Webbrowser sin crear el control Webbrowser:

Código
  1. Dim WB as new WebBrowser

Eso es como preguntar si puedes clickar un Botón de la UI de tu app, sin haber agregado ese botón a la UI, no tiene sentido, la respuesta obviamente es No.

El control WebBrowser no es más que un host, un control que hospeda una instancia embedida del proceso de InternetExplorer.

Cuando comprendemos eso, encontes podemos decir que si es posible utilizar un ""WebBrowser"" si ejecutas manualmente el proceso de IE y utilizas un motor de automatización como por ejemplo Microsoft UI automation, pero no te recomiendo que apliques esta técnica en absoluto, ya que la utilización de UI Automation es bastante tediosa incluso para llevar a cabo pequeñas tareas (ej: obtener el texto de la barrá de título de una ventana), requiere una alta comprensión sobre el significado y la funcionalidad de todos los miembros que componen las classes de Microsoft UI automation, que no son para nada pocos.

UI Automation Overview
( No te dejes confundir por que forme parte de WPF, se puede usar perfectamente bajo Windows Forms, y para hacerle un Spy cualquier tipo de aplicación )

Yo personalmente, para la automatización de IE (y cualquier otro navegador), te recomiendo utilizar la herramienta profesional Test Studio de Telerik, es la mejor herramienta que existe para esto (le da mil vueltas a iMacros), donde se puede generar un código funcional en VB.Net/C# para llevar a cabo la automatización y controlar hasta el más mínimo detalles. Es perfecto para controlar el comportamiento de los diálogos de archivo (creo que preguntaste algo respecto a los diálogos en otro post).

Telerik Test Studio (no confundir con Telerik Testing Framework)



Me gustaría poder usar WebBrowser sin alojar nada en el caché.
sin alojar, cookies,  imágenes, scripts, etc en el disco. Es decir, que no se descargue nada en disco.

Cómo ya hemos dicho, el control WebBrowser es un host para InternetExplorer, y, comparte la configuración actual que el usuario tenga aplicada en InternetExplorer,
los diálogos, cookies, y etc, se manejan directamente por IE, no por el control WebBrowser, así que no puedes modificar el comportamiento de IE desde el "WebBrowser control".

Esto quiere decir que, si quieres desactivar el Caching y/o el almacenamiento de Cookies del WebBrowser, debes modificar directamente la configuración de InternetExplorer en el equipo actual para desactivar esas características.

About the Browser - MSDN



cookies, cache

Cookies:
En Internet Explorer, click en el menú Herramientas -> Opciones de Internet -> Privacidad -> Avanzado - Administración de cookies -> Bloquear.
How to manage cookies in Internet Explorer 9 - Microsoft

Caching:
En Internet Explorer, click en el menú General -> Historial de navegación -> Elegir la opción de este tipo de cache.
plus:
How to Modify Caching Behavior in Internet Explorer 10

También puedes modificar la configuración de IE mediante el registro de Windows, en la clave que almacena la configuración de IE, pero no recuerdo exactamente la ruta de la clave de registro, puedes buscarla en Google.

También existaen algunas funciones de la API de Windows que sirven para modificar el comportamiento de IE.

Nota:
Es muy importante que comprendas que, si tienes pensado sitribuir tu app, por norma general ese tipo de cambios en el sistema no no son recomendables, ya que es un claro ejemplo de intrusismo agresivo en el sistema operativo del end-user, no se debe modificar la configuración de "X" programa externo a menos que el usuario lo haya permitido estando conforme a los cambios que se aplicarán.



Sólo para obtener información de una página como links o código

Si no necesitas navegar en la página entonces no necesitas usar IE (WebBrowser) ni el host de MSHTML ni nada parecido, puedes usar la Class HttpWebRequest/HttpWebResponse (entre otras) para realizar peticiones a una url y obtener la respuesta (el código fuente de la página).

HttpWebRequest Class (System.Net) - MSDN
HttpWebResponse Class (System.Net) - MSDN

Esa es la técnica que generálmente se utiliza para ese tipo de tareas, usar un WebBrowser es algo muy excesivo en caso de que no necesites navegar por la página de forma interactiva/visual.

Si necesitas usar la nevagación y necesitas desactivar cualquier tipo de caching, entonces en lugar de trastear con IE y la configuraciónd le usuario, es preferible que utilices un host de Firefox o Chrome para .Net (aunque tendrás que documentarte bien primero, ya que cambia mucho el nombre de los miembros de sus classes, y la manera de utilizarlos en comparación con un WebBrowser control).

Gecko FX

Saludos!


« Última modificación: 19 Junio 2015, 22:34 pm por Eleкtro » En línea



okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Navegar con WebBrowser sin alojar archivos en caché
« Respuesta #2 en: 20 Junio 2015, 00:09 am »

Hola

Antes de nada, felicitarte Elektro por tu ayuda aquí, que es incalculable. Ya que te esfuerzas mucho y es de apreciar pues mucha gente contesta con monosílabos.

Parece que sabes mucho de esto. Perdona mi ignorancia y a ver si puedes decirme si este otro método podría servir, quizás algo chapucero:

Descargo la web con la función API, URLDownloadToFile y establecer BINDF_PRAGMA_NO_CACHE que según encontré en el MSN es :
  Value that indicates that the resource will not be stored in the Internet cache.

Alojo el archivo único en una carpeta temporal. Y luego lo abro con Webbrowser.

Código
  1.    Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
  2.    (ByVal pCaller As Integer, _
  3.     ByVal szURL As String, _
  4.     ByVal szFileName As String, _
  5.     ByVal dwReserved As Integer, _
  6.     ByVal lpfnCB As Integer) As Integer
  7.  
  8.    Const BINDF_PRAGMA_NO_CACHE = &H2000
  9.    Const ERROR_SUCCESS = 0
  10.  
  11.    Public Function GetCodeWEB(ByVal sURL As String) As String
  12.  
  13.        Dim sLocalTempFile As String = My.Computer.FileSystem.SpecialDirectories.Temp & "\file_web.html"
  14.  
  15.        If URLDownloadToFile(&H0, sURL, sLocalTempFile, ERROR_SUCCESS Or BINDF_PRAGMA_NO_CACHE, &H0) = ERROR_SUCCESS Then
  16.            Dim strBuffer As New System.IO.StreamReader(sLocalTempFile)
  17.            Return strBuffer.ReadToEnd
  18.            strBuffer.Close()
  19.        Else
  20.            GetCodeWEB = "Página no encontrada"
  21.        End If
  22.  
  23.  
  24.    End Function






En cuanto a lo del control WebBrowser es una ventana host  que como dices va con IE y lógicamente para mostrar el contenido web primer se alojan los archivos en el caché, para después cargarlo.

Sin embargo puedo usar...

Código
  1. Dim WB as new WebBrowser

...sin haber integrado ningún WebBrowser en el formulario.

Código
  1. Dim WB As New WebBrowser
  2.        WB.Navigate("http://...")
  3.        Dim CodeWeb As String = WB.DocumentText
  4.  

Aun así supongo que se guardan datos de caché, que era la duda que yo tenía.







« Última modificación: 20 Junio 2015, 00:33 am por okik » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Navegar con WebBrowser sin alojar archivos en caché
« Respuesta #3 en: 20 Junio 2015, 00:32 am »

1. Cada vez usas algo más rebuscado, ¿por qué usas la API de Windows para descargar un archivo?, tienes toda una librería de classes de .Net para hacer lo que quieras. Inenta seguir las indicaciones que te di arriba.

Código
  1.        Using sr As New StreamReader(HttpWebRequest.Create("http://foro.elhacker.net/").GetResponse().GetResponseStream)
  2.  
  3.            Using sw As New StreamWriter("C:\source.html", append:=False)
  4.  
  5.                sw.Write(sr.ReadToEnd)
  6.  
  7.            End Using
  8.  
  9.        End Using

Cómo alternativa, puedes utilizar el método 'My.Computer.Network.DownloadFile'.

2. La documentación de la función URLDownloadToFile explica que el cuarto parámetro (dwReserved) está reservado por el sistema, y debes asignarlo cómo "0" (null), no usar ninguna enumeración que altere dicho valor.

pCaller
    ...

szURL
    ...

szFileName
    ...

dwReserved
    Reserved. Must be set to 0.


lpfnCB
    ...

No se donde habrás encontrado el ejemplo que has mostrado, pero sin ver el código original para entender lo que el autor del código intenta hacer con los valores de esa enumeración no te puedo decir más, de todas formas tampoco he usado esa función nunca.

Saludos!
« Última modificación: 20 Junio 2015, 00:57 am por Eleкtro » En línea



okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Navegar con WebBrowser sin alojar archivos en caché
« Respuesta #4 en: 20 Junio 2015, 00:42 am »


Si no necesitas navegar en la página entonces no necesitas usar IE (WebBrowser) ni el host de MSHTML ni nada parecido, puedes usar la Class HttpWebRequest/HttpWebResponse (entre otras) para realizar peticiones a una url y obtener la respuesta (el código fuente de la página).

➢ HttpWebRequest Class (System.Net) - MSDN
➢ HttpWebResponse Class (System.Net) - MSDN

....


Es justo lo que necesitaba gracias
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Navegar con WebBrowser sin alojar archivos en caché
« Respuesta #5 en: 20 Junio 2015, 00:43 am »

En cuanto a lo del control WebBrowser es una ventana host  que como dices va con IE y lógicamente para mostrar el contenido web primer se alojan los archivos en el caché, para después cargarlo.

Sin embargo puedo usar...

Código
  1. Dim WB as new WebBrowser

...sin haber integrado ningún WebBrowser en el formulario.

Pero es que lo que estás diciendo no tiene nada que ver entre si, creo que estás confundiendo las cosas, intentaré explicarlo:

WebBrowser es una Class que tiene definido un constructor default para instanciar la class, es decir, lo que tú haces aquí:
Código
  1. Dim wb as new WebBrowser

Ahí estás creando una instancia de WebBrowser/IE, mientras no la añadas al Form no se dibujará el control, pero la instancia del control existe.

Dicha Class, WebBrowser, hereda de la Class WebBrowserBase y este a su vez hereda de la class Control, esto es lo que lo define cómo un control, y que lo puedas añadir a la UI:
Código
  1. Me.Controls.Add(wb)

Obviamente los miembros de la Class WebBrowser podrás utilizarlos sin que hayas añadido el control a la UI (igual que puedes hacer con cualquier otro Class que herede de un Control, cómo la Class Label),
por ejemplo el método WebBrowser.Navigate() puedes utilizarlo, pero el comportamiento del WebBrowser no cambia en absoluto, me refiero a que se seguirá utilizando IE "de forma invisible" para la navegación y si por ejemplo una página contiene scripts conflictivos, se seguirá mostrando un aviso de error de script de IE aunque no hayas agregado el control a la UI, puedes comprobarlo tu mismo con este code:

Código
  1. Dim wb as new WebBrowser
  2. ' wb.ScriptErrorsSuppressed = False
  3. wb.Navigate("http://submanga.com/")

Saludos!
« Última modificación: 20 Junio 2015, 00:52 am por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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