WebBrowser bloqué dans VB6 [Résolu]

Menerlach 57 Messages postés dimanche 2 décembre 2012Date d'inscription 1 juin 2015 Dernière intervention - 24 nov. 2014 à 23:46 - Dernière réponse : Menerlach 57 Messages postés dimanche 2 décembre 2012Date d'inscription 1 juin 2015 Dernière intervention
- 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

Répondre au sujet
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 25 nov. 2014 à 10:04
0
Utile
Bonjour

Montre le code que tu as écrit
Commenter la réponse de cs_ShayW
Menerlach 57 Messages postés dimanche 2 décembre 2012Date d'inscription 1 juin 2015 Dernière intervention - 25 nov. 2014 à 10:52
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 25 nov. 2014 à 11:02
0
Utile
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
Menerlach 57 Messages postés dimanche 2 décembre 2012Date d'inscription 1 juin 2015 Dernière intervention - 25 nov. 2014 à 15:37
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 25 nov. 2014 à 16:03
0
Utile
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
Menerlach 57 Messages postés dimanche 2 décembre 2012Date d'inscription 1 juin 2015 Dernière intervention - 25 nov. 2014 à 19:57
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 25 nov. 2014 à 20:23
0
Utile
Oui ... pardi ...tant que son état est "Busy" !
Commenter la réponse de ucfoutu
Menerlach 57 Messages postés dimanche 2 décembre 2012Date d'inscription 1 juin 2015 Dernière intervention - 25 nov. 2014 à 22:55
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 26 nov. 2014 à 07:36
0
Utile
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
Menerlach 57 Messages postés dimanche 2 décembre 2012Date d'inscription 1 juin 2015 Dernière intervention - Modifié par Menerlach le 26/11/2014 à 12:21
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.