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 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
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 211
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 211
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 211
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 211
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
Rejoignez-nous