Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: **Aincrad** en 25 Enero 2019, 18:46 pm



Título: Personalizar una descarga del Control WebBrowser
Publicado por: **Aincrad** en 25 Enero 2019, 18:46 pm
Tengo una duda, Como prodria hacer q no aparezca el cuadro de dialogo de descarga del control.
y obtener la url de esa descarga??.



Título: Re: Personalizar una descarga del Control WebBrowser
Publicado por: Eleкtro en 25 Enero 2019, 21:05 pm
Para cancelar la descarga de archivos puedes utilizar la interfaz 'ShellBrowserWindow' de la librería COM 'shdocvw.dll', ubicada en el directorio 'C:\Windows\System32'.

Para obtener la url de descarga, puedes leer el atributo 'href' del elemento HTML activo. Supongo que esto funcionará siempre así... aunque no me atrevo a asegurarlo al 100% ya que no domino de forma avanzada la programación HTML.

En fin. Para usar el siguiente código de ejemplo, primero añade una referencia a la librería que he mencionado... no te pase como la última vez  :¬¬ xD. Aquí tienes:

Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Private WithEvents ShellWebBrowser1 As SHDocVw.ShellBrowserWindow
  4.  
  5.    Public Sub New()
  6.        MyClass.InitializeComponent()
  7.        Me.WebBrowser1.ScriptErrorsSuppressed = True
  8.    End Sub
  9.  
  10.    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Shown
  11.        ' Sitio web con varias descargas de archivos zip...
  12.        Me.WebBrowser1.Navigate("https://www.thinkbroadband.com/download")
  13.    End Sub
  14.  
  15.    Private Sub WebBrowser1_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs) Handles WebBrowser1.VisibleChanged
  16.  
  17.        ' Importante: no trasladar este código al método "Form1_Load"...
  18.  
  19.        Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
  20.        If (wb.Visible) AndAlso (Me.ShellWebBrowser1 Is Nothing) Then
  21.            Me.ShellWebBrowser1 = DirectCast(wb.ActiveXInstance, SHDocVw.ShellBrowserWindow)
  22.        End If
  23.  
  24.    End Sub
  25.  
  26.    Private Sub ShellWebBrowser1_FileDownload(ByVal activeDocument As Boolean, ByRef cancel As Boolean) Handles ShellWebBrowser1.FileDownload
  27.        ' Cancelar descarga de archivo...
  28.        cancel = True
  29.  
  30.        ' Obtener la url de descarga...
  31.        Dim href As String = Me.WebBrowser1.Document.ActiveElement.GetAttribute("href")
  32.        Console.WriteLine(href)
  33.    End Sub
  34.  
  35. End Class

Nótese que esto no impedirá poder seguir usando el menú contextual para descargar un archivo mediante la opción "Guardar destino como..."

Si quieres impedir la descarga mediante el menú contextual, puedes crear tu propio menú y asignarlo a la propiedad WebBrowser1.ContextMenuStrip, o bien puedes suscribirte al evento HtmlDocument.ContextMenuShowing para cancelar la aparición del menú. Un ejemplo minificado:

Código
  1. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
  2.    Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
  3.  
  4.    AddHandler wb.Document.ContextMenuShowing,
  5.        Sub(ByVal browser As Object, ByVal args As HtmlElementEventArgs)
  6.            args.ReturnValue = False
  7.        End Sub
  8. End Sub

Saludos.


Título: Re: Personalizar una descarga del Control WebBrowser
Publicado por: **Aincrad** en 25 Enero 2019, 22:17 pm
Como Evito que aparezca el cuadro de dialogo al activarse la descarga?,

No me da lo que contiene el href . la pagina es la siguiente https://www.convertmp3.io/widget/button/?video=https://www.youtube.com/watch?v=KhPNuBi8pJM (https://www.convertmp3.io/widget/button/?video=https://www.youtube.com/watch?v=KhPNuBi8pJM) puedes inspeccionarla.



Título: Re: Personalizar una descarga del Control WebBrowser
Publicado por: Eleкtro en 25 Enero 2019, 23:37 pm
Puedes obtener el enlace de descarga al menos de estas dos formas...

1:
Código
  1. Me.WebBrowser1.Document.GetElementById("downloadButton").GetAttribute("href")

2:
Código
  1. Me.WebBrowser1.Document.Body.FirstChild.GetAttribute("href")

saludos