OVH Cloud OVH Cloud

webbrowser

20 réponses
Avatar
scraper
bonjour à tous, et avant toutes choses, bonne année !

voila 2 petits soucis avec un webBrowser qui charge une page html dans ma
form :

1 je souhaiterais pauser l'exécution du code de cette form, tant que la page
n'est pas complètement chargée, mais je ne sais pas trop comment faire ?

une boucle avec :

Do While WebBorwser1.Busy
Sleep 1000
Loop

ne donnant pas les résultats escomptés


2 si la page web distante que je charge dans mon contrôle comporte une
erreur de script, comment faire pour bypasser le message d'erreur ? (objet
manquant, ou autres, dûs à un mauvais codage de la page ?

j'ai essayé de placer des On Error Resume Next, sans résultat


merci de toute aide




--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper

10 réponses

1 2
Avatar
Jean-marc
"scraper" a écrit dans le message de news:


bonjour à tous, et avant toutes choses, bonne année !

voila 2 petits soucis avec un webBrowser qui charge une page html dans ma
form :

1 je souhaiterais pauser l'exécution du code de cette form, tant que la
page n'est pas complètement chargée, mais je ne sais pas trop comment
faire ?

une boucle avec :

Do While WebBorwser1.Busy
Sleep 1000
Loop

ne donnant pas les résultats escomptés


2 si la page web distante que je charge dans mon contrôle comporte une
erreur de script, comment faire pour bypasser le message d'erreur ? (objet
manquant, ou autres, dûs à un mauvais codage de la page ?

j'ai essayé de placer des On Error Resume Next, sans résultat






Hello Scraper,

Bonne année à toi aussi!

Tu peux utiliser l'évènement NavigateComplete2, qui se
déclenche quand la page est "presque" chargée...
Cf:
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/events/navigatecomplete2.asp

Tu peux aussi utiliser le changement de StatusText avec
WebBrowser1_StatusTextChange

Pas forcément satisfaisant, à voir selon ton usage...

Un mini bout de code qui permet de voir ce qui se passe:


' 8<-------------------------------------------------
Option Explicit

Dim G_FINI As Boolean
Private Sub Command1_Click()
WebBrowser1.Navigate2 ("http:www.yahoo.fr")
End Sub

Private Sub Command2_Click()
WebBrowser1.Navigate2 ("http:www.yahoo.fr")
G_FINI = False
While Not G_FINI
' sleep 10
DoEvents
Wend
MsgBox "il a fini"
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As
Variant)
Debug.Print "navigate complete"
End Sub

Private Sub WebBrowser1_StatusTextChange(ByVal Text As String)
Debug.Print "->" & Text & "<-"
If Text = "Terminé" Then
G_FINI = True
End If
End Sub
' 8<---------------------------------------------


Pour le bypass des messages d'erreur, je ne sais pas :-(


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
scraper
Bonjour Jean-marc, dans le message
news:459bc36c$0$21498$
tu disais :


Hello Scraper,

Bonne année à toi aussi!

Tu peux utiliser l'évènement NavigateComplete2, qui se
déclenche quand la page est "presque" chargée...
Cf:
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/events/navigatecomplete2.asp

Tu peux aussi utiliser le changement de StatusText avec
WebBrowser1_StatusTextChange

Pas forcément satisfaisant, à voir selon ton usage...



merci de ta réponse !

ce qui est surprenant, c'est que, concernant ce problème d'erreur, cela ne
se produit pas si j'écris un script qui effectue la même tâche .... :(

alors je me suis inspiré de ce code :

Dim Web As SHDocVw.InternetExplorer

Set Web = New SHDocVw.InternetExplorer
Web.Visible = True
Web.Navigate (http://www.google.be)

que j'ai inséré dans mon projet d'exe ....

en y insérant également la boucle que j'écrivais ci dessus, et avec une
tempo, ça le fait ....
de toutes façons, c'est pas grave, ça doit rester en local, alors pourvu que
ça fonctionne chez moi :-D

maintenant, pour que ça aille bien, me reste une dernière (peut être ....
lol question :

quelle méthode puis je utiliser pour que mon programme se mette en "veille",
en consommant le moins de ressources possible, et se "réveille" toutes les
heures ?

je pensais utiliser GetTickCount() couplé à un timer, mais je doute de la
fiabilité du timer ?
et je crains d'utiliser une boucle ????!

amicalement




--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
Jean-marc
"scraper" a écrit dans le message de news:

Bonjour Jean-marc, dans le message
news:459bc36c$0$21498$
tu disais :


Hello Scraper,

Bonne année à toi aussi!

Tu peux utiliser l'évènement NavigateComplete2, qui se
déclenche quand la page est "presque" chargée...
Cf:
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/events/navigatecomplete2.asp

Tu peux aussi utiliser le changement de StatusText avec
WebBrowser1_StatusTextChange

Pas forcément satisfaisant, à voir selon ton usage...



merci de ta réponse !

ce qui est surprenant, c'est que, concernant ce problème d'erreur, cela ne
se produit pas si j'écris un script qui effectue la même tâche .... :(

alors je me suis inspiré de ce code :

Dim Web As SHDocVw.InternetExplorer

Set Web = New SHDocVw.InternetExplorer
Web.Visible = True
Web.Navigate (http://www.google.be)

que j'ai inséré dans mon projet d'exe ....

en y insérant également la boucle que j'écrivais ci dessus, et avec une
tempo, ça le fait ....
de toutes façons, c'est pas grave, ça doit rester en local, alors pourvu
que ça fonctionne chez moi :-D

maintenant, pour que ça aille bien, me reste une dernière (peut être ....
lol question :

quelle méthode puis je utiliser pour que mon programme se mette en
"veille", en consommant le moins de ressources possible, et se "réveille"
toutes les heures ?

je pensais utiliser GetTickCount() couplé à un timer, mais je doute de la
fiabilité du timer ?
et je crains d'utiliser une boucle ????!



Pourquoi faire compliqué?

Un simple controle Timer et tu testes l'heure
avec la fonction Time, c'est plus que suffisant,
non?

Et tu règles l'interval à 1, 2 ou plus secondes,
en fonction de tes besoins. La consommation
en ressource sera très très petite (invisible).

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
scraper
Bonjour Jean-marc, dans le message
news:459bf059$0$6462$
tu disais :

Pourquoi faire compliqué?

Un simple controle Timer et tu testes l'heure
avec la fonction Time, c'est plus que suffisant,
non?

Et tu règles l'interval à 1, 2 ou plus secondes,
en fonction de tes besoins. La consommation
en ressource sera très très petite (invisible).



ben comme je te disais, j'ai besoin de "réveiller" mon appli toute les
heures, et je voudrais quela mesure du temps ne soit pas trop fantaisiste
;-)

or je me suis laissé dire que le timer n'était pas si précis ?

amicalement


--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
Jean-marc
"scraper" a écrit dans le message de news:

Bonjour Jean-marc, dans le message
news:459bf059$0$6462$
tu disais :

Pourquoi faire compliqué?

Un simple controle Timer et tu testes l'heure
avec la fonction Time, c'est plus que suffisant,
non?

Et tu règles l'interval à 1, 2 ou plus secondes,
en fonction de tes besoins. La consommation
en ressource sera très très petite (invisible).



ben comme je te disais, j'ai besoin de "réveiller" mon appli toute les
heures, et je voudrais quela mesure du temps ne soit pas trop fantaisiste
;-)

or je me suis laissé dire que le timer n'était pas si précis ?



C'est un faux problème :-)

Le timer n'est "pas précis" si on l'utilise pour faire
des cumuls de valeurs, par ce qu'on va alors propager
l'erreur.

Mais si on programme un timer pour qu'il fasse un évènement
toutes les secondes (ou toutes les 2 secondes, ou 10 secondes
ou peu importe) et que dans l'évènement Timer on prend l'heure
avec la fonction TIME, alors il n'y a aucun problème.
Je suppose que tu n'es pas à la recherche de la microseconde
pour réveiller ton appli? Le but c'est que tu fasses quelque chose
toutes les 60 minutes ou toutes les 3600 secondes ...

L'idée c'est donc:
- utiliser le timer pour avoir environ un évènement toutes les
secondes, il ne sert qu'à ça
- Dans l'évènement, regarder l'heure avec la fonction Time
- Si c'est l'heure, faire qq chose, noter que c'est fait et
réamorcer pour dans une heure.

Après, Il y a 100 façons d'implémenter ce principe :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
scraper
Bonjour Jean-marc, dans le message
news:459c082c$0$21501$
tu disais :


or je me suis laissé dire que le timer n'était pas si précis ?



C'est un faux problème :-)

Le timer n'est "pas précis" si on l'utilise pour faire
des cumuls de valeurs, par ce qu'on va alors propager
l'erreur.

Mais si on programme un timer pour qu'il fasse un évènement
toutes les secondes (ou toutes les 2 secondes, ou 10 secondes
ou peu importe) et que dans l'évènement Timer on prend l'heure
avec la fonction TIME, alors il n'y a aucun problème.
Je suppose que tu n'es pas à la recherche de la microseconde
pour réveiller ton appli? Le but c'est que tu fasses quelque chose
toutes les 60 minutes ou toutes les 3600 secondes ...

L'idée c'est donc:
- utiliser le timer pour avoir environ un évènement toutes les
secondes, il ne sert qu'à ça
- Dans l'évènement, regarder l'heure avec la fonction Time
- Si c'est l'heure, faire qq chose, noter que c'est fait et
réamorcer pour dans une heure.

Après, Il y a 100 façons d'implémenter ce principe :-)



hello, et merci de ta réponse ...

bien vu la différence, je vais mettre ça en application !

je suppose que ce sera moins gourmand en temps processeur que la boucle que
j'ai faite ?

pour info, mon prog doit tourner en permanence sur la bécane, et toutes les
heures lance une autre appli ...


ma boucle :

Do While GetTickCount < StartTime + Value
Sleep 1000
DoEvents
Loop

StartTime est la valeur de GetTickCount lors du dernier évènement (lancement
de l'appli) et Value vaut 3 600 000 (secondes)


merci de ton avis ....

amicalement




--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
Jean-marc
"scraper" a écrit dans le message de news:

Bonjour Jean-marc, dans le message
news:459c082c$0$21501$
tu disais :


or je me suis laissé dire que le timer n'était pas si précis ?



C'est un faux problème :-)

Le timer n'est "pas précis" si on l'utilise pour faire
des cumuls de valeurs, par ce qu'on va alors propager
l'erreur.

Mais si on programme un timer pour qu'il fasse un évènement
toutes les secondes (ou toutes les 2 secondes, ou 10 secondes
ou peu importe) et que dans l'évènement Timer on prend l'heure
avec la fonction TIME, alors il n'y a aucun problème.
Je suppose que tu n'es pas à la recherche de la microseconde
pour réveiller ton appli? Le but c'est que tu fasses quelque chose
toutes les 60 minutes ou toutes les 3600 secondes ...

L'idée c'est donc:
- utiliser le timer pour avoir environ un évènement toutes les
secondes, il ne sert qu'à ça
- Dans l'évènement, regarder l'heure avec la fonction Time
- Si c'est l'heure, faire qq chose, noter que c'est fait et
réamorcer pour dans une heure.

Après, Il y a 100 façons d'implémenter ce principe :-)



hello, et merci de ta réponse ...

bien vu la différence, je vais mettre ça en application !

je suppose que ce sera moins gourmand en temps processeur que la boucle
que j'ai faite ?

pour info, mon prog doit tourner en permanence sur la bécane, et toutes
les heures lance une autre appli ...


ma boucle :

Do While GetTickCount < StartTime + Value
Sleep 1000
DoEvents
Loop

StartTime est la valeur de GetTickCount lors du dernier évènement
(lancement de l'appli) et Value vaut 3 600 000 (secondes)





Oui la version avec un timer est bien meilleure,
car tu ne propages pas d'erreur. En plus c'est
moins gourmand en ressources et plus souple
si tu veux faire des modifications par la suite:
tu gardes le timer à résolution de 1 sec, et dans
l'évènement tu testes autant d'heures de déclenchement
que tu veux.


J'utilise ce principe pour un scheduler de batch un peu
particulier au boulot (je ne pouvais pas utiliser
le task scheduler).

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
scraper
Bonjour Jean-marc, dans le message
news:459ce22c$0$6468$
tu disais :


Oui la version avec un timer est bien meilleure,
car tu ne propages pas d'erreur. En plus c'est
moins gourmand en ressources et plus souple
si tu veux faire des modifications par la suite:
tu gardes le timer à résolution de 1 sec, et dans
l'évènement tu testes autant d'heures de déclenchement
que tu veux.


J'utilise ce principe pour un scheduler de batch un peu
particulier au boulot (je ne pouvais pas utiliser
le task scheduler).



OK, je te remercie de tous ces renseignements, que j'ai appliqués ;-)

je me suis servi de la fonction Time, et de DateAdd, DateDiff ...

ça roule, merci énormément :-)


amicalement

--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
Jean-marc
"scraper" a écrit dans le message de news:
e$5Dl9$
Bonjour Jean-marc, dans le message
news:459ce22c$0$6468$
tu disais :


Oui la version avec un timer est bien meilleure,
car tu ne propages pas d'erreur. En plus c'est
moins gourmand en ressources et plus souple
si tu veux faire des modifications par la suite:
tu gardes le timer à résolution de 1 sec, et dans
l'évènement tu testes autant d'heures de déclenchement
que tu veux.


J'utilise ce principe pour un scheduler de batch un peu
particulier au boulot (je ne pouvais pas utiliser
le task scheduler).



OK, je te remercie de tous ces renseignements, que j'ai appliqués ;-)

je me suis servi de la fonction Time, et de DateAdd, DateDiff ...

ça roule, merci énormément :-)


amicalement



C'était avec plaisir!

A++

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Driss HANIB
Bonjour JeanMarc et Scraper,

tout d'abords je vous retourne mes meilleurs voeux ainsi qu'aux membres de
la liste.
Très intéressante votre discussion sur timer, et notamment sur la perte de
ressource générée par son utilisation..
Merci

Driss
1 2