WebBrowser chargement terminer

Signaler
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
-
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
-
Bonjour,

Je voudrais savoir comment faire pour que, une fois la page completement chargé, la suite de mon programme se fasse. J'ai essayer de tester un truc avec ProcessMax mais je n'ai pas réussi. Du coup pour le moment je fait avec un system de pause mais ce n'est pas très fiable car sa peut changer d'une machine a une autre.

Merci de votre aide.

7 réponses

Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
la page est déjà charger ! c est quand il y a me clic sur le bouton input que je veux attendre la fin de la page avant de passer à la suite.
Messages postés
2166
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juillet 2020
109 >
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017

A tester
Une fois la page internet commencée à être chargée on ajoute le gestionnaire d'attente avec le AddHandler. Une fois le chargement fini la procédure ProgrammeContinue s'exécute : elle libère l'instance du Webbrowser et continue le programme au Form3.Load .
Je ne garantis rien : je n'ai pas testé


Public Class Form1
Public url As String

Dim instance As SendKeys
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Then 'Verification que les textbox contiennent bien des caractères
MsgBox("Veillez complétez tous les champs ou vérifiez que vous avez rentrer les bonnes informations.") 'Texte afficher quand il y a une erreur
Else
WebBrowser1.Document.GetElementById("bgcdw_login_form_username").SetAttribute("value", TextBox1.Text) 'Completion de l'id du site via le contenue de la text.box1
WebBrowser1.Document.GetElementById("bgcdw_login_form_password").SetAttribute("value", TextBox2.Text) 'Completion du mdp du site via le contenue de la text.box1
Dim inputs As HtmlElementCollection 'Début de l'action de clic
inputs = WebBrowser1.Document.GetElementsByTagName("input") 'Définition du type de bouton
For Each input As HtmlElement In inputs
If input.GetAttribute("className") = "bgcdw_button bgcdw_login_form_login" Then 'La valeur input du bouton
input.InvokeMember("Click") 'Le clic a proprement parler
End If
Next
' chargement de la page Internet
url = WebBrowser1.Url.ToString
' Ajoute un gestionnaire d'événement qui continue le programme une fois le chargement terminé.
AddHandler webBrowser1.DocumentCompleted, New _
WebBrowserDocumentCompletedEventHandler(AddressOf Programmcontinue)
End If
End Sub

Private Sub Programmcontinue(ByVal sender As Object, _
ByVal e As WebBrowserDocumentCompletedEventArgs)

Dim webBrowserload As WebBrowser = CType(sender, WebBrowser)

' Supprime l'instance du WebBrowser maintenant que le chargement est terminé.
webBrowserLoad.Dispose()
' la suite de ton code une fois la page chargée
Form3.Show() 'Affichage de la form3
Me.Close()
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Me.Hide()
Form2.Show()
End Sub
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
Alors sa marche bien mais j'ai un petit problème ^^ ! Sa m’ouvre la page 2 fois dans mon navigateur (chrome)
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
Bon je viens de résoudre le problème ! Il fallait juste supprimer webBrowserLoad.Dispose()
Messages postés
2166
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juillet 2020
109 >
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017

si le problème est résolu ferme le s'il te plait !
Merci
L'autre problème concerne un autre post
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
Maintenans j'ai un autre probleme, je voudrais que quand la page a fini de chargé, il vérifie si il y a ce texte dans la page avant d'afficher la forme 2 :
http://codes-sources.commentcamarche.net/forum/affich-10057125-webbrowser-verifie-texte#p10057125
Messages postés
28851
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2020
332
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
Merci ! J'avais déjà été voir sur cette page mais j'avais pas compris le fonctionnement !
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
du coup peut tu m'aider ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
225
Bonjour,
La procédure évènementielle que t'a signalée Jordane45 se déclenche automatiquement à la fin du chargement de ton document.
Il te suffit alors d'y passer à true, par exemple, une variable booléenne (déclarée générale) de ton choix et de subordonner (dans ta procédure principale) la continuation de tes instructions au passage à True de cette variable (une simple boucle while fera l'affaire)
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
OK je testé sa après les cours et je te tien au courant
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
Bon ba je sais pas j'ai essayer différent truc mais sa marche pas ! Apres je débute en vb.net donc bon je vais rester avec mes timer.
Messages postés
2166
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juillet 2020
109
Bonjour !
A tester d'après les informations suggérées par Jordane45
Code non testé par moi même

Private Sub LoadPage()

' Chargement de la page

' Créer une nouvelle instance du WebBrowser
Dim webBrowserForLoad As New WebBrowser()

' Ajoute un gestionnaire d'événement qui continue le programme une fois le chargement terminé.
AddHandler webBrowserForLoad.DocumentCompleted, New _
WebBrowserDocumentCompletedEventHandler(AddressOf Programmcontinue)

' On charge la page
webBrowserForLoad.Url = New Uri("\\myshare\help.html")

End Sub

Private Sub Programmcontinue(ByVal sender As Object, _
ByVal e As WebBrowserDocumentCompletedEventArgs)

Dim webBrowserForLoad As WebBrowser = CType(sender, WebBrowser)

' Supprime l'instance du WebBrowser maintenant que le chargement est terminé.
webBrowserLoad.Dispose()

' ici le code une fois le chargement terminé

End Sub

Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
Donc en gros tout mon code je doit le metre apres sa : webBrowserLoad.Dispose()

Voila tout mon code :
Public Class Form1
    Public url As String

    Dim instance As SendKeys
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Then 'Verification que les textbox contiennent bien des caractères
            MsgBox("Veillez complétez tous les champs ou vérifiez que vous avez rentrer les bonnes informations.") 'Texte afficher quand il y a une erreur
        Else
            WebBrowser1.Document.GetElementById("bgcdw_login_form_username").SetAttribute("value", TextBox1.Text) 'Completion de l'id du site via le contenue de la text.box1
            WebBrowser1.Document.GetElementById("bgcdw_login_form_password").SetAttribute("value", TextBox2.Text) 'Completion du mdp du site via le contenue de la text.box1
            Dim inputs As HtmlElementCollection 'Début de l'action de clic
            inputs = WebBrowser1.Document.GetElementsByTagName("input") 'Définition du type de bouton
            For Each input As HtmlElement In inputs
                If input.GetAttribute("className") = "bgcdw_button bgcdw_login_form_login" Then 'La valeur input du bouton
                    input.InvokeMember("Click") 'Le clic a proprement parler
                End If
            Next
            hbwait(15000)
            url = WebBrowser1.Url.ToString
            Form3.Show() 'Affichage de la form3
            Me.Close()
        End If
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Me.Hide()
        Form2.Show()
    End Sub

    Friend Sub hbwait(ByVal ms_to_wait As Long) 'Fonction d'attente
        Dim endwait As Double
        endwait = Environment.TickCount + ms_to_wait
        While Environment.TickCount < endwait
            System.Threading.Thread.Sleep(1)
            Application.DoEvents()
        End While
    End Sub

End Class


Si j'ai bien compris il faut que je mette juste cette partie la :
url = WebBrowser1.Url.ToString
            Form3.Show() 'Affichage de la form3
            Me.Close()


Se qui veut dire que les 2 private Sub je doit les mettre dans celui de mon bouton ?
Messages postés
2166
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juillet 2020
109 >
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017

Dans la Sub Button1_Click quelle instruction charge la page proprement dite ?
Messages postés
561
Date d'inscription
jeudi 25 octobre 2012
Statut
Membre
Dernière intervention
22 janvier 2017
1
Aucune ! La page est deja chargé lors du lancement de la forme.