Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD11] découverte de l'automation

7 réponses
Avatar
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=E8s un Post
ici, on m'a orient=E9 sur automation (j'en remercie de nouveau l'auteur)
Apr=E8s quelques recherches (c'est touffu tout =E7=E0 surtout dans le MSDN)
et s'inspirant de script trouv=E9 sur le web, j'ai cr=E9e un page de test
dans lequel j'ai d=E9fini un champ ActiveX nomm=E9 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=3D"Shell.Explorer"
// Instanciation OK ?
objTest est un objet OLE dynamique =3D WebBrowser1
SI objTest =3D Null ALORS
lib=E9rer objTest
FinProgramme("L'ActiveX Internet Explorer n'a pas pu =EAtre charg=E9")
FIN
lib=E9rer objTest
HTMLDocument est un objet OLE dynamique
WebBrowser1>>Navigate("http://www.developpez.com")
HTMLDocument=3DWebBrowser1>>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=E8re ligne : Info
(HTMLDocument>>Title) message d'erreur =3D L'objet sur lequel on acc=E8de
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=E9 =E0 HTMLDocument. Ensuite je lit la propri=E8te 'Title' de l'obje=
t
document.

Merci de votre exp=E9rience en la mati=E8re.

7 réponses

Avatar
Daniel
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
;-)
Avatar
Firetox
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" a écrit dans le message de news:

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.
Avatar
mystere689
> 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
Avatar
mystere689
> 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é.
Avatar
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é.
Avatar
Firetox
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" a écrit dans le message de news:

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é.
Avatar
Firetox
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" a écrit dans le message de news:

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é.