Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    VB .net problema WebBrowser (non riesco ad attendere che abbia caricato l'url)

    Salve a tutti,
    ho un problema con un programma in VB .net

    Il mio intento è quello di catturare il codice HTML di una pagina e di trovare alcune stringhe all'interno del codice
    Posto una prima parte del codice:

    codice:
    ...
    Dim Url As New System.Uri("http://www.ilmiourl.it"))
    Dim HTML As String
    WebBrowser1.Url = Url
    HTML = WebBrowser1.DocumentText
    ...
    fino a qui tutto bene...
    Dopo poco arrivo a questo punto e viene generata un'eccezione perchè sembra che HTML sia vuota.

    codice:
    ...
    If HTML.IndexOf("Error!") < 0 Then
    ...
    Il mio dubbio è che non venga assegnato istantaneamente alla variabile HTML il codice della pagina anche perchè inserendo prima del problema un qualsiasi msgbox solo per perdere un po' di tempo non viene generato nessun errore e tutto funziona bene.

    Ho difficoltà a trovare nella guida e su google come realizzare un loop bloccante in modo tale da aspettare che WebBrowser1 finisca di carica la pagina.

    Sapreste indicarmi come aspettare che WebBrowser1 finisca di caricare la pagina una strada per capire come farlo?

    Grazie in anticipo per la risposta.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Perche' usare il WebBrowser ...?

    Con il .NET hai delle classi apposite

    codice:
    Imports System.IO
    Imports System.Net
    
    ...
    
    Dim strURL AsString = "http://www.ilmiourl.it"
    Dim wrq As HttpWebRequest = WebRequest.Create(strURL)
    wrq.Method = "GET"
    Dim wrs As HttpWebResponse = wrq.GetResponse()
    Dim sr As StreamReader = New StreamReader(wrs.GetResponseStream)
    Dim sRes AsString = sr.ReadToEnd.Trim
    sr.Close()
     
    ' Risultato nella stringa sRes
    
    ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Con la classe WebClient poi il codice si semplifica ancor di più.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Ho usato il webbrowser solo perchè sono in fase di inizio scrittura e volevo vedere il risultato a video...
    effettivamente dovrei abbandonarlo perchè è inutile ai fini di quello che devo fare.
    Provo con questo e poi ti faccio sapere se ho risolto.
    Comunque il dubbio mi rimane sul come riuscire a realizzare un processo bloccante in generale...
    Grazie per la risposta

  5. #5
    Ho usato il codice che mi avete indicato.
    ma ho un problema...ho una pagina iniziale nella quale dovrei fare un login.
    Con il webbrowser lo risolvevo facendolo io manualmente poi mandavo in esecuzione il codice che a questo punto riusciva ad accedere alle varie pagine.
    Così giustamente non si muove dalla pagina di login

  6. #6
    Esamina il funzionamento della pagina di login e simula la richiesta che viene effettuata (probabilmente di tipo POST) con il WebClient (che è in grado di mantenere anche i cookie, a differenza di WebRequest e WebResponse).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Probabilmente di tipo post, è il classico form il metodo dovrebbe essere quello ma ancora nn ho controllato.
    In tutti i casi penso che avro ancora quel problema.
    Il mio problema è che nn riesco a far aspettare al controllo che la pagina abbia finito di caricarsi per questo volevo fare un proscesso bloccante.
    Ho provato anche con i thread mandandolo in sleep per qualche secondo ma niente.
    Ho dato un occhio anche agli altri metodi per sincronizzare i thread.
    Cmq adesso provo con questo tuo consiglio e ti faccio sapere.
    Grazie per l'aiuto.

  8. #8
    Non dovrebbe esserci uno spazio dove poter inserire del codice una volta terminato il download del url?

  9. #9
    Cosa intendi per spazio?
    comunque ho risolto...in modo barbaro ma ho risolto.
    Un timer aspetta da quando assegno l'url un paio di secondi prima prelevare il codice html.
    Così non ho problemi...ma non mi piace come soluzione perchè non è precisa e potrebbe esserci sempre un ritardo maggiore di due secondi...per il momento funziona poi vedrò di migliorarlo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.