[WD11] découverte de l'automation

Le
mystere689
Je suis sous VISTA et WD11
Je souhaitais intervenir sur une page WEB de facon interactif. Du
genre, clic droit et un menu perso pour differente page. après un Post
ici, on m'a orienté sur automation (j'en remercie de nouveau l'auteur)
Après quelques recherches (c'est touffu tout çà surtout dans le MSDN)
et s'inspirant de script trouvé sur le web, j'ai crée un page de test
dans lequel j'ai défini un champ ActiveX nommé WebBrowser1. dans un
bouton je met le code suivant afin d'afficher le titre de la page web
(celui entre les balise title si j'ai bien compris):
WebBrowser1="Shell.Explorer"
// Instanciation OK ?
objTest est un objet OLE dynamique = WebBrowser1
SI objTest = Null ALORS
libérer objTest
FinProgramme("L'ActiveX Internet Explorer n'a pas pu être chargé")
FIN
libérer objTest
HTMLDocument est un objet OLE dynamique
WebBrowser1>>Navigate("http://www.developpez.com")
HTMLDocument=WebBrowser1>>Document
Info(HTMLDocument>>Title)

Je passe bien la phase d'instanciation, et la page WEB s'affiche bien
dans mon champ ActiveX (bon debut).
Mais cela m'affiche une erreur sur la dernière ligne : Info
(HTMLDocument>>Title) message d'erreur = L'objet sur lequel on accède
au membre Title n'est pas un objet Automation.

Quelqu'un peut-il me dire au cela coince dans ma facon de faire ???

mon raisonnement :
WEBbrowser est un objet qui contient un autre objet document que j'ai
affecté à HTMLDocument. Ensuite je lit la propriète 'Title' de l'obje=
t
document.

Merci de votre expérience en la matière.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel
Le #17919811
mystere689 a écrit :
Je suis sous VISTA et WD11
Je souhaitais intervenir sur une page WEB de facon interactif. Du
genre, clic droit et un menu perso pour differente page. après un Post
ici, on m'a orienté sur automation (j'en remercie de nouveau l'auteur)
Après quelques recherches (c'est touffu tout çà surtout dans le MSDN)
et s'inspirant de script trouvé sur le web, j'ai crée un page de test
dans lequel j'ai défini un champ ActiveX nommé WebBrowser1. dans un
bouton je met le code suivant afin d'afficher le titre de la page web
(celui entre les balise title si j'ai bien compris):
WebBrowser1="Shell.Explorer"
// Instanciation OK ?
objTest est un objet OLE dynamique = WebBrowser1
SI objTest = Null ALORS
libérer objTest
FinProgramme("L'ActiveX Internet Explorer n'a pas pu être chargé")
FIN
libérer objTest
HTMLDocument est un objet OLE dynamique
WebBrowser1>>Navigate("http://www.developpez.com")
HTMLDocument=WebBrowser1>>Document
Info(HTMLDocument>>Title)

Je passe bien la phase d'instanciation, et la page WEB s'affiche bien
dans mon champ ActiveX (bon debut).
Mais cela m'affiche une erreur sur la dernière ligne : Info
(HTMLDocument>>Title) message d'erreur = L'objet sur lequel on accède
au membre Title n'est pas un objet Automation.

Quelqu'un peut-il me dire au cela coince dans ma facon de faire ???

mon raisonnement :
WEBbrowser est un objet qui contient un autre objet document que j'ai
affecté à HTMLDocument. Ensuite je lit la propriète 'Title' de l'objet
document.

Merci de votre expérience en la matière.





Bonsoir,

il faut que tu regardes la doc car il faut respecter les hiérarchies du type
document->header etc

Voici un exemple de ce que tu veux, fait sous Delphi
http://delphi.about.com/od/internetintranet/a/webbrowserenum.htm

Bref il existe des exemples en C, Basic, Delphi et peut être même en Windev.

Ce que tu dois faire est d'instancier les élément en dynamique
je n'ai plus tout le mécanisme dans la tête mais par exemple

MyDocument est un objet Automation dynamique
MyTitle est un objet Automation dynamique
MyBody est un objet Automation dynamique

Après avoir chargé ton document
par exemple je sais que Body existe

MyBody = MyDocument>>body()

ensuite tu dois connaitre les méthodes qui s'applique à Body

Le plus pénible est la documentation de l'activeX.

Sinon tu peux faire exactement avec assembly en .net (c'est un peu plus
simple de trouver la doc et fonctionne aussi bien).

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Firetox
Le #17919801
Bonjour,

WEBbrowser est un objet qui contient un autre objet document que j'ai
affecté à HTMLDocument. Ensuite je lit la propriète 'Title' de l'objet
document.



oui mais on ne peut pas separer les 2 objets avec windev

par contre
WebBrowser1>>Document>>Title est valide

pour avoir le code html du document
WebBrowser1>>document>>body>>innerHtml

pour avoir le texte
WebBrowser1>>document>>body>>innerText

pour imprimer
WebBrowser1>>ExecWB(6,1)
ou WebBrowser1>>ExecWB(6,2)

etc .....
sur msdn il y a pas mal de chose mais je n'ai plus le lien



"mystere689"
Je suis sous VISTA et WD11
Je souhaitais intervenir sur une page WEB de facon interactif. Du
genre, clic droit et un menu perso pour differente page. après un Post
ici, on m'a orienté sur automation (j'en remercie de nouveau l'auteur)
Après quelques recherches (c'est touffu tout çà surtout dans le MSDN)
et s'inspirant de script trouvé sur le web, j'ai crée un page de test
dans lequel j'ai défini un champ ActiveX nommé WebBrowser1. dans un
bouton je met le code suivant afin d'afficher le titre de la page web
(celui entre les balise title si j'ai bien compris):
WebBrowser1="Shell.Explorer"
// Instanciation OK ?
objTest est un objet OLE dynamique = WebBrowser1
SI objTest = Null ALORS
libérer objTest
FinProgramme("L'ActiveX Internet Explorer n'a pas pu être chargé")
FIN
libérer objTest
HTMLDocument est un objet OLE dynamique
WebBrowser1>>Navigate("http://www.developpez.com")
HTMLDocument=WebBrowser1>>Document
Info(HTMLDocument>>Title)

Je passe bien la phase d'instanciation, et la page WEB s'affiche bien
dans mon champ ActiveX (bon debut).
Mais cela m'affiche une erreur sur la dernière ligne : Info
(HTMLDocument>>Title) message d'erreur = L'objet sur lequel on accède
au membre Title n'est pas un objet Automation.

Quelqu'un peut-il me dire au cela coince dans ma facon de faire ???

mon raisonnement :
WEBbrowser est un objet qui contient un autre objet document que j'ai
affecté à HTMLDocument. Ensuite je lit la propriète 'Title' de l'objet
document.

Merci de votre expérience en la matière.
mystere689
Le #17920921
> par contre
WebBrowser1>>Document>>Title est valide




Oui mais info(WebBrowser1>>Document>>Title) renvoie toujours cette
erreur : L'objet sur lequel on accède
au membre Title n'est pas un objet Automation
mystere689
Le #17921111
> par contre
WebBrowser1>>Document>>Title est valide

pour avoir le code html du document
WebBrowser1>>document>>body>>innerHtml

pour avoir le texte
WebBrowser1>>document>>body>>innerText



tous renvoi l'erreur : L'objet sur lequel on accède
au membre Title (ou Body selon) n'est pas un objet Automation

Vous etez sur que c'est pas ma version de WINDEV qui bug ???? Ou alors
y a un épisode que j'ai manqué.
mystere689
Le #17921391
Voilà, j'ai une partie qui fonctionne. Cela ne venais pas du code,
mais tout implement du fait que la page WEB n'était pas encore fini de
charger quand on passé sur la demande de titre.

donc j'ai fait ceci en declaration globale de fenetre :
WebBrowser1="Shell.Explorer"
// Instanciation OK ?
objTest est un objet Automation dynamique
objTest=WebBrowser1
SI objTest = Null ALORS
libérer objTest
FinProgramme("L'ActiveX Internet Explorer n'a pas pu être chargé")
FIN
HTMLDocument est un objet Automation dynamique
objTest>>Navigate("http://www.developpez.com")

J'attend que mon champ activeX affiche la page et dans un bouton j'ai
mis le code :
HTMLDocument=objTest>>Document
Info(HTMLDocument>>Title )

et cela fonctionne.

Donc on peut separer les 2 objets avec windev mais effectivement
WebBrowser1>>Document>>Title fonctionne quand même.

Prochaine etat, détecter la fin de chargement de la page pour que la
procedure du bouton s'exécute automatiquement.

Merci de vos conseils qui m'ont bien aidé.
Firetox
Le #17922231
Bonjour,

oui c'est possible (je viens d'essayer)
cela faisait au moins 3 ans que je n'avait utilisé l'activeX

pour attendre que la page soit chargée :

objTest>>Navigate("http://www.developpez.com")
WHILE objTest>>busy
// on attend la fin du chargement
END
// la page est chargée on peut continuer

c'est cela que j'utilisais

Bon dev
@+


"mystere689"
Voilà, j'ai une partie qui fonctionne. Cela ne venais pas du code,
mais tout implement du fait que la page WEB n'était pas encore fini de
charger quand on passé sur la demande de titre.

donc j'ai fait ceci en declaration globale de fenetre :
WebBrowser1="Shell.Explorer"
// Instanciation OK ?
objTest est un objet Automation dynamique
objTest=WebBrowser1
SI objTest = Null ALORS
libérer objTest
FinProgramme("L'ActiveX Internet Explorer n'a pas pu être chargé")
FIN
HTMLDocument est un objet Automation dynamique
objTest>>Navigate("http://www.developpez.com")

J'attend que mon champ activeX affiche la page et dans un bouton j'ai
mis le code :
HTMLDocument=objTest>>Document
Info(HTMLDocument>>Title )

et cela fonctionne.

Donc on peut separer les 2 objets avec windev mais effectivement
WebBrowser1>>Document>>Title fonctionne quand même.

Prochaine etat, détecter la fin de chargement de la page pour que la
procedure du bouton s'exécute automatiquement.

Merci de vos conseils qui m'ont bien aidé.
Firetox
Le #17922221
BOnjour,

en 2003 j'avais fait une classe pour gerer cela
http://famille.sqlmanagerx.com/classes.htm
Classe CInternetExplorer qui fontionnait pas mal

Bon dev
@+



"mystere689"
Voilà, j'ai une partie qui fonctionne. Cela ne venais pas du code,
mais tout implement du fait que la page WEB n'était pas encore fini de
charger quand on passé sur la demande de titre.

donc j'ai fait ceci en declaration globale de fenetre :
WebBrowser1="Shell.Explorer"
// Instanciation OK ?
objTest est un objet Automation dynamique
objTest=WebBrowser1
SI objTest = Null ALORS
libérer objTest
FinProgramme("L'ActiveX Internet Explorer n'a pas pu être chargé")
FIN
HTMLDocument est un objet Automation dynamique
objTest>>Navigate("http://www.developpez.com")

J'attend que mon champ activeX affiche la page et dans un bouton j'ai
mis le code :
HTMLDocument=objTest>>Document
Info(HTMLDocument>>Title )

et cela fonctionne.

Donc on peut separer les 2 objets avec windev mais effectivement
WebBrowser1>>Document>>Title fonctionne quand même.

Prochaine etat, détecter la fin de chargement de la page pour que la
procedure du bouton s'exécute automatiquement.

Merci de vos conseils qui m'ont bien aidé.
Publicité
Poster une réponse
Anonyme