Sélectionner dans une liste déroulante sur le web à partir de vb [Résolu]

Messages postés
7
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
7 mai 2008
- - Dernière réponse : rvblog
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
- 9 mai 2007 à 22:03
Bonjour,

Je cherche comment sélectionner un élément dans une liste déroulante qui se trouve sur une page web avec des frames à partir de VB. Je suis capable d'ouvrir ma page et de cliquer sur un bouton sur celle-ci mais je n'ai pas trouvé comment manipuler une liste déroulante.

Quelqu'un peut m'aider???

Merci!

Lanannie
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
7
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
7 mai 2008
3
Merci
Re-Bonjour,

Voilà ça fonctionne!!! Voici ma procédure:

Public Sub FormListe(ByVal argFrame As String, ByVal argListe As String, ByVal argId As String)
On Error Resume Next
Dim liste As HTMLSelectElement

For Each liste In WebDoc.frames(CStr(argFrame)).document.All(CStr(argListe))
If liste.id = CStr(argId) Then
WebDoc.frames(CStr(argFrame)).document.All(CStr(argListe)).selectedIndex = liste.Options
GoTo fin
End If
Next liste
fin:
End Sub

Tu m'as donné le bon type de variable à utiliser (HTMLSelectElement).
Merci pour tout!

A+

Lanannie

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 199 internautes nous ont dit merci ce mois-ci

Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
Salut Lanannie,

à partir de VB ou de VBScript?
Quand tu dis "de cliquer sur un bouton", envoie de touches clavier ou appel du CMD_Click?
si t'es en VBScript, il me semble que la sélection d'une combo ou d'une liste, c'est la propriété ListIndex (de 0 à ListCount-1, et la valeur -1 si pas de selection), elle est en lecture/ecriture.

à+,


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
7
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
7 mai 2008
0
Merci
Allo,

Merci de prêter attention à mon problème.

J'ai fait une application en VB6 qui navigue automatiquement sur un site web. Mais voilà, je suis capable d'ouvrir la page, de mettre mon user et mon password, de cliquer sur le bouton ok, de cliquer sur un lien mais je ne suis pas capable de sélectionner un élément d'une liste déroulante. Le tout doit se faire automatiquement sans l'intervention d'un usager.

Merci à l'avance...

Lanannie
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
C'est encore moi,

je vais encore t'en demander, mais c'est parce que je vois que personne n'a l'air de répondre, pourtant ce n'est pas le genre de problème rare (j'ai pas dit pas compliqué). Donc, je pense qu'il te faut être encore plus explicite.
Pilotes-tu Internet Explorer (via AUTOMATION, ou autre) ou un navigateur exotique (genre FireFox, Opera ou NetScape, ou autres) et si c'est le cas, avec quelle méthode (API, sendKeys,...), ou utilises-tu un composant de Navigation (genre WebBrowser), ou suis-je devenu très vieux parce que c'est carrément autre chose? :)

tu vois, c'est pas pour t'embêter, mais des raisons au problème tel que tu le décris, et les solutions adaptées à celles que tu utilises, il y en a des tonnes,

à+, de te relire,


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
7
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
7 mai 2008
0
Merci
Allo,

Ça me fait plaisir de te donner plus de détails!

Voici des exemples de procédures d'accès à certains contrôles de ma page web déclarées dans un module de classe:

Dim WithEvents IntExp As InternetExplorer 'pour gérer les événement IE
Dim WithEvents WebDoc As HTMLDocument 'pour gérer les événement IE.Document

' Pour cliquer sur un bouton
Public Sub ClickButton(ByVal argButtonName As String)
On Error Resume Next
WebDoc.All(argButtonName).Click
End Sub


' Pour remplir un champ comme une textbox
Public Sub FillField(ByVal argFieldName As String, ByVal argValue As String)
On Error Resume Next
WebDoc.All(argFieldName).value = argValue
End Sub


' Pour trouver une image et cliquer dessus
Public Sub ClickImage(ByVal argFrame As String, ByVal argImage As String)
On Error Resume Next
Dim image As HTMLImg

For Each image In WebDoc.frames(CStr(argFrame)).document.images
If Right(image.src, Len(argImage)) = argImage Then
image.Click
GoTo fin
End If
Next image
fin:
End Sub


' Pour trouver un lien et cliquer dessus
Public Sub ClickLien(ByVal argFrame As String, ByVal argLien As String)
On Error Resume Next
Dim lien As HTMLLinkElement

For Each lien In WebDoc.frames(CStr(argFrame)).document.links
If Right(lien, Len(argLien)) = argLien Then
lien.Click
GoTo fin
End If
Next lien
fin:
End Sub

Voici maintenant comment j'appelle mes procédures dans un module standard:

Sub Main()
Dim IntExp As New IntExp

With IntExp
...
.FillField "Login", "UserName"
.ClickButton "NomBouton"
.ClickLien "NomFrame", "CheminLien"
.ClickImage "NomFrame", "NomImage"
....
End With
End Sub

Alors voilà, je veux choisir dans une liste déroulante qui se trouve dans un frame de ma page web.

J'espère que j'ai réussi à bien t'expliquer...

Merci encore!

Lanannie
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
Oui j'écoute :)

parfait! j'adore qu'on me parle comme ça!

dans ton WebDoc (de type HTMLDocument), tu dois trouver un .body (de type HTMLBody), et lui-même contient un .children (de type DispHTMLElementCollection), que tu peux donc énumérer, jusqu'à trouver un ou des .item (de type HTMLSelectElement).

Tu dois pouvoir solliciter la méthode .Click sur ces items là (de type HTMLSelectElement). Pour ceux là seulement, on est d'accord!

Bon, je n'ai pas ta page HTML, donc je ne connais pas exactement la hiérarchie body/frames/forms..., et donc je donne la structure générique (j'ai lu ton exemple, mais je ne l'ai pas reproduit). Ensuite, pour la liste déroulante, je pars de l'hypothèse que c'est une balise SELECT (mais ça pourrait être un activex MS, combobox, etc, que tu trouverais dans cette même collection, de type HTMLObjectElement).

Au fait, je trouve que ta méthode est douce, agréable à penser, et ...
diablement machiavélique ! S'il savait l'IE, ce que tu lui fait de l'intérieur !!!


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
et évidemment, pris par l'émotion, j'en oublie :

un .item (de type HTMLSelectElement), contient lui-même un .children (de type HTMLOptionElement), dont tu peux lire le .index (démarre à 0), mettre le .Selected (à True), et solliciter le .Click!

à+

rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
7
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
7 mai 2008
0
Merci
Super !
Je teste ça et je t'en redonne des nouvelles!

Merci!
A+

Lanannie
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
Bien content pour toi,
à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
1
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 mai 2007
0
Merci
comment trouver de la doc sur les objet qui provienne de IE.
En effet, j'ai une application web avec un webbrowser.
J'arrive a charge google,
inserer en automatique un texte a chercher.
mais je n'arrive pas a cliquer sur le bouton .

  WebBrowser1.Document.All("btnG").Click
erreur : l'objet ne gere pas cette propriete ou cette methode
comment faire
ou se documenter ?
msdn ?

tb atlasinformatique@free.fr
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
Salut 43280 tbalensi,

un 1er conseil : ne postes pas directement une adresse e-mail sur un forum, les robots de spam risquent de te trouver et de poluer ton mail (utilises plutôt les lessages personnels [mp], et bien sûr, quand tu sais à qui en envoyer un!).

Le plus simple, c'est la MSDN Library. Quand on a une licence profressionnelle de VB6 ou de son Visual Studio (ou de .NET), on a accès à une bibliothèque d'aide conséquente qui s'appelle Microsoft Developper Network Library.

Sinon, puisque tu as VB, quand tu mets en oeuvre le WebBrowser, mets un point d'arrêt sur une ligne quelconque dans une procédure, dans la portée de laquelle tu as une référence au dit WebBrowser. Sélectionnes (surlignes) la-dite référence, cliques droit, choisis 'ajouter un espion', et valides. Là, VB t'ouvre une fenêtre qui contient les espions déclarés, et tu peux parcourir le contenu (sous forme d'arborescence) de toutes les variables que tu as choisis d'espionner.

Ici, tu as vraimment accès à toutes les propriétés (mais pas les méthodes, oh, dommage), et même parfois à des choses que la syntaxe simple de VB ne te permettra pas de voir. Il faudra parfois aussi essayer des syntaxes (en tatonnant) pour arriver à y accéder en VB (par exemple, quand on examine le contenu d'une collection, on ne voit pas les Key des éléments, et VB les appelle arbitrairement Item1, Item2..., qui sont de fausses clés).

Pour ce qui est de la méthode que tu cherches, je ne t'apprends rien si je te dis qu'elle n'existe pas. Dans ton cas, il faut une approche différente :

Sois, via l'API de Windows, tu simules un click de l'utilisateur (fastidieux car il faut connaitre les coordonnées du click, et pas très viable parce que ce n'est pas toujours le même formulaire, la même résolution, le même scroll...).

Sois, via le DOM du browser (DOM = Document Object Model, le modèle objet de l'objet principal qui t'intéresse, le 'Document'), tu fais ce que fais le click du bouton (si c'est un bouton submit, tu remplis les variables du formulaire, et tu soumets le formulaire, si c'est un script, tu prépares le contexte d'exécution et tu exécutes le script...).

dis-moi si ça t'aides.
à+

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
0
Merci
et puis j'oubliais :

cherches dans le moteur de recherche du site, par exemple, dans les Codes, cherches 'poster un formulaire avec socket' ou 'Get/Post', sûr que tu trouves ton bonheur.

allez marseillais,
à+

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>