WebBrowser - pagine caricate parzialmente

di il
12 risposte

WebBrowser - pagine caricate parzialmente

Buonaserata a tutti voi.

Per puro passa-tempo, sto “costruendo” un mio piccolo browser con alcune tipiche funzionalità (preferiti, cronologia, pagina di default, ecc.).

Il problema è che poche pagine vengono caricate correttamente.

Il più delle volte le pagine o non vengono visualizzate oppure risultano incomplete.

Sono io che non conosco il componente o è il componente non aggiornato?

Con  l'occasione (non so se devo aprire un nuovo argomento!) ,avrei bisogno di sapere come copiare in una variabile il percorso di un link di una pagina web.Ho effettuato molte ricerche, senza esito.

Grazie mille.

12 Risposte

  • Re: WebBrowser - pagine caricate parzialmente

    https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://m.youtube.com/watch%3Fv%3DtSIpE2qNgmg&ved=2ahUKEwi2ne7x3PqAAxViQfEDHed0AJIQwqsBegQIDBAG&usg=AOvVaw15_y_n355ddfH_iNh9BXl2

  • Re: WebBrowser - pagine caricate parzialmente

    Grazie,sihsandrea.

    Ho preso visione del video, ma non risolve il mio problema.

  • Re: WebBrowser - pagine caricate parzialmente

    Quando utilizzi l'oggetto WebBrowser, viene simulato il browser “Internet Explorer versione 7”, un prodotto del 2006, quindi un pochino obsoleto, e quindi è normale che non ti carichi delle pagine o non le visualizza correttamente.

    Aggiungi questo codice al tuo progetto:

            <System.Runtime.CompilerServices.Extension()> _
            Public Function InitIE11(WB As System.Windows.Forms.WebBrowser) As String
    
            WB.ScriptErrorsSuppressed = True
    
            Try
                ' Computer\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
                Dim VersionCode = 11001 ' IE11
                Dim Root As String = "HKEY_CURRENT_USER\"
                Dim AppName = My.Application.Info.AssemblyName
                Dim Key As String = "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"
    
                Dim SubKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(Key)
                If SubKey Is Nothing Then
                    ' chiave non trovata, tento di crearla
                    SubKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(Key)
                    If SubKey Is Nothing Then
                        Return "Impossibile creare la voce di registro per il WebBrowser"
                    End If
                End If
    
                Dim CurrentSetting As String = CStr(SubKey.GetValue(AppName & ".exe"))
                If CurrentSetting Is Nothing OrElse CInt(CurrentSetting) <> VersionCode Then
    #If DEBUG Then
                    Microsoft.Win32.Registry.SetValue(Root & Key, AppName & ".vshost.exe", VersionCode)
    #End If
                    Microsoft.Win32.Registry.SetValue(Root & Key, AppName & ".exe", VersionCode)
                End If
            Catch ex As Exception
                Return "Exception: " & ex.Message
            End Try
    
            Return ""
    
        End Function

    Nell'evento Form_Load dovrai chiamare quindi questa routine controllando la stringa di risposta.
    Se la stringa è vuota è tutto ok, sennò conterrà il messaggio di errore

    Io l'ho definita come un estensione, quindi puoi chiamarla con

    Dim Risultato As String = WebBrowser1.InitIE11()

    oppure togli la definizione di “estensione” e la chiami con 

    Dim Risultato As String = InitIE11(WebBrowser1)

    Con questa chiamata il WebBrowser andrà a simulare il “Internet Explorer versione 11”, decisamente più recente e più compatibile con le pagine web più recenti.

    Puoi eventualmente sostituire la riga
    Dim VersionCode = 11001 ' IE11
    con
    Dim VersionCode = 12001 ' Edge

    e andrai a simulare Internet Edge, ma dalle prove che ho fatto non ho trovato grandi differenze

    Io utilizzo intensamente l'oggetto WebBrowser nei miei programmi, per l'automazione di inserimento dati nelle pagine web.
    Da un po' di tempo però il WebBrowser non riesce a visualizzare certe pagine web, soprattutto quelle costruite con il React e quindi per alcuni programmi ho dovuto cambiare sistema e quindi utilizzo Selenium WebDriver

  • Re: WebBrowser - pagine caricate parzialmente

    SirJo,grazie! Sei un grande!Da te ho sempre ottenuto delle ottime soluzioni!

    La situazione è migliorata moltissimo. Ora, non vedo (o vedo in modo alterato) il 20/30% dei siti.

    Ignoravo completamente che il componente facesse riferimemto a IE7.

    Grazie.

  • Re: WebBrowser - pagine caricate parzialmente

    Ottimo, mi fa piacere che funzioni.

    Per la tua seconda domanda che hai fatto:

    Dim theUrl As String = WebBrowser1.Url.AbsolutePath
  • Re: WebBrowser - pagine caricate parzialmente

    Potresti prendere in considerazione di usare il controllo Webview2 che utilizza edge come motore https://developer.microsoft.com/en-us/microsoft-edge/webview2/ 

  • Re: WebBrowser - pagine caricate parzialmente

    WebView2 è ovviamente un ottimo prodotto, comunque io l'ho trovato un po' complicato.

    Mi sai dire ad esempio come posso accedere al DOM e quindi a tutte le proprietà degli HTMLElements ??

    Solo tramite JavaScript ??

  • Re: WebBrowser - pagine caricate parzialmente


    > WebView2 è ovviamente un ottimo prodotto, comunque io l'ho trovato un po' complicato.

    concordo , era molto più facile accedere agli elementi della pagina nel vecchio componente

    > Solo tramite JavaScript ??

    per quanto ne sappia io solo tramite javascript

  • Re: WebBrowser - pagine caricate parzialmente

    27/08/2023 - SirJo ha scritto:


    Ottimo, mi fa piacere che funzioni.

    Per la tua seconda domanda che hai fatto:

    Dim theUrl As String = WebBrowser1.Url.AbsolutePath

    SirJo, mi sono espresso male.Volevo sapere come -passando il mouse su un link di una pagina web- potessi intercettare l'indirizzo assoluto per poterlo riutilizzare (a me serve per aprire una nuova scheda con quel link).

    Quando -con Edge- passi il mouse su un link, in basso a sinistra viene visualizzato il suo percorso assoluto.E' questo che chiedo.Come posso registrare in una variabile quel percorso? Grazie.

  • Re: WebBrowser - pagine caricate parzialmente

    28/08/2023 - Jan ha scritto:

    SirJo, mi sono espresso male.Volevo sapere come -passando il mouse su un link di una pagina web- potessi intercettare l'indirizzo assoluto per poterlo riutilizzare (a me serve per aprire una nuova scheda con quel link).

    Quando -con Edge- passi il mouse su un link, in basso a sinistra viene visualizzato il suo percorso assoluto.E' questo che chiedo.Come posso registrare in una variabile quel percorso? Grazie.

    Devi costruirtelo tu.
    Devi analizzare la pagina HTML, trovare l'elemento che ti interessa e leggere la proprietà href
    Poi, se è un indirizzo assoluto ok, sennò ti leggi la proprietà <base> e te lo costruisci

  • Re: WebBrowser - pagine caricate parzialmente

    28/08/2023 - SirJo ha scritto:


    Devi costruirtelo tu.
    Devi analizzare la pagina HTML, trovare l'elemento che ti interessa e leggere la proprietà href
    Poi, se è un indirizzo assoluto ok, sennò ti leggi la proprietà <base> e te lo costruisci

    Grazie , SirJo. E' complicato, ma non mi manca nè tempo nè voglia di riuscirci.

  • Re: WebBrowser - pagine caricate parzialmente

    27/08/2023 - SirJo ha scritto:


    WebView2 è ovviamente un ottimo prodotto, comunque io l'ho trovato un po' complicato.

    Mi sai dire ad esempio come posso accedere al DOM e quindi a tutte le proprietà degli HTMLElements ??

    Solo tramite JavaScript ??

    Può interessarti? 

    Winform to Webview2 DOM manipulation - C#

    https://www.bing.com/videos/riverview/relatedvideo?&q=webview2+vb+net+example&&mid=782978DD035A868FF40D782978DD035A868FF40D&&FORM=VRDGAR

Devi accedere o registrarti per scrivere nel forum
12 risposte