WebBrowser bloqué dans VB6

Résolu
Menerlach
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015
- 24 nov. 2014 à 23:46
Menerlach
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015
- 26 nov. 2014 à 11:23
Bonjour,

J'utilise WebBrowser avec l'instruction "WebBrowser1.Navigate adresse de page" pour charger une page internet, généralement ça marche très bien.
Quand la page demandée n'est pas accessible il me charge à la place une page d'erreur, jusque là c'est normal, mais si à la suite de ça je refais WebBrowser1.Navigate avec une autre adresse ou si je fais WebBrowser1.GoBack ou WebBrowser1.GoSearch il reste scotché sur la page d'erreur, plus moyen de l'envoyer sur une autre page :(

Je ne peux qu'arrêter mon programme et le relancer, ça permet de continuer mais c'est quand même un peut lourd et ce n'est plus de la programmation !

J'espère que quelqu'un a une solution...

Merci de m'avoir lu.

10 réponses

cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
25 nov. 2014 à 10:04
Bonjour

Montre le code que tu as écrit
0
Menerlach
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015

25 nov. 2014 à 10:52
En gros j'utilise

Internet.WebBrowser1.Navigate Page_internet$
continu_script% = 0
While continu_script% = 0
DoEvents
Wend

dans un module puis je récupère le résultat dans la feuille "Internet"

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim t$, c$, e$, i%, j%
If (pDisp Is WebBrowser1.object) Then 'attend le chargement de toutes les "frames"
While WebBrowser1.Busy
Wend
If WebBrowser1.LocationURL = Page_internet$ Then
nombre(8) = 0 'marqueur page chargée avec succès
Else
If nombre(8) = 2 Then ' traitement une seule fois
nombre(8) = 1
Else ' si page d'erreur on va sur une autre page
WebBrowser1.GoSearch 'GoBack 'WebBrowser1.Navigate page_precedante$
nombre(8) = 2 'marqueur page d'erreur traitée
End If
End If
WebBrowser1.Stop
page_finie
End If
End Sub

Dans page_finie, entre autres, on met continu_script% à 1.
Aussi bien en mode normal qu'en "pas à pas" le second navigate, remplacé par goback, puis par goseach pour voir, n'a aucun effet la page affichée reste la même et l'adresse renvoyée par WebBrowser1.LocationURL reste identique, différente de page_precedante$...

L'adresse contenue dans Page_internet$ est
"https://www.themoviedb.org/movie/65644-le-diable-boiteux/images?kind=poster&language=en"
Dans page_precedante$
"https://www.themoviedb.org/movie/65644-le-diable-boiteux/images?kind=poster&language=fr"
et la page d'erreur (WebBrowser1.LocationURL) est
"https://www.themoviedb.org/translate/movie/65644?language=en"

Voilà...
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
25 nov. 2014 à 11:02
Bonjour,
J'en ai parlé relativement récemment.
Ces deux lignes :
While WebBrowser1.Busy
Wend

sont périlleuses.
Prévoir de stopper si durée estimée excessive (sinon : boucle sans fin).
0
Menerlach
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015

25 nov. 2014 à 15:37
Je sais que la tendance naturelle des boucles est d'être sans fin;) mais je n'ai jamais eu de problème avec celle-là...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
25 nov. 2014 à 16:03
Cette boucle-là ne cause en effet pas de problème si tout se passe bien, c'est-à-dire si pas toujours Busy, puisque se termine en même temps que busy ...
Mais ne se termine pas si toujours busy. Et il te faut alors le prévoir (une sortie de boucle si toujours busy au bout d'un certain temps).
0
Menerlach
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015

25 nov. 2014 à 19:57
For bien mais ça ne résout pas mon problème, dans la situation décrite il n'y a aucun plantage, le programme fonctionne normalement, y compris en pas à pas, mis à part que WebBrowser reste obstinément sur le page "https://www.themoviedb.org/translate/movie/65644?language=en"...
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
25 nov. 2014 à 20:23
Oui ... pardi ...tant que son état est "Busy" !
0
Menerlach
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015

25 nov. 2014 à 22:55
Bon, pour lever tout doute j'ai mis en remarque les deux lignes en question puis j'ai réessayé avec un WebBrowser1.GoBack.
Comme avant l'adresse WebBrowser1.LocationURL n'a pas changé.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
26 nov. 2014 à 07:36
Ces deux lignes ne doivent surtout pas être inhibées (en commentaires), mais complétées par une instruction de sortie en cas de durée d'attente trop grande.
En y insérant par ailleurs un DoEvents, cela te permettrait enfin de reconnaître une action sur un autre bouton (de close par exemple) et d'agir en conséquence au sein de ta boucle, comme on le fait généralement pour arrêter une boucle while (nombreux exemples sur ce forum)
Ceci étant dit, même en prenant les plus grandes précautions, il peut arriver que certains sites soient quelquefois bloquants, notamment si trop gourmands et que les ressources disponibles sont insuffisantes. Cela peut arriver y compris avec des navigateurs sophistiqués.
0
Menerlach
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015

Modifié par Menerlach le 26/11/2014 à 12:21
Finalement j'ai refais un programme avec le strict minimum et il semble que le problème vient de ma gestion du site pour le fonctionnement normal et du basic pour le pas à pas....

Il semble que WeBrowser1.Navigate, GoBack ou GoSearch ne fonctionnent pas correctement quand on exécute le programme en pas à pas, dans ce cas l'évènement WebBrowser1._DocumentComplete n'a jamais lieu.

Merci de votre aide c'était très sympa.

P.S.
J'ai maintenu la suppression de la boucle busy, ça n'a pas l'air d'affecter les résultats mais ça accélère considérablement les choses !
0