WebBrowser bloqué dans VB6 [Résolu]

Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015
- - Dernière réponse : 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.
Afficher la suite 

10 réponses

Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
46
0
Merci
Bonjour

Montre le code que tu as écrit
Commenter la réponse de cs_ShayW
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015
0
Merci
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à...
Commenter la réponse de Menerlach
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
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).
Commenter la réponse de ucfoutu
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015
0
Merci
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à...
Commenter la réponse de Menerlach
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
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).
Commenter la réponse de ucfoutu
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015
0
Merci
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"...
Commenter la réponse de Menerlach
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Oui ... pardi ...tant que son état est "Busy" !
Commenter la réponse de ucfoutu
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015
0
Merci
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é.
Commenter la réponse de Menerlach
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
57
Date d'inscription
dimanche 2 décembre 2012
Statut
Membre
Dernière intervention
1 juin 2015
0
Merci
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 !
Commenter la réponse de Menerlach