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

Naviguer ds IE7 avec VB

9 réponses
Avatar
Dom
Bonjour,

Ds mon code VB6, je lance une url (IE7) via un webbrowser. La page php
appelée contient 2 champs texte et un bouton de validation. Je ne parviens
pas à naviguer via VB ds mon browser pour aller "activer" (cliquer) sur le
bouton de validation contenu ds la page php. Quelle pourrait être la
commande pour faire celà ?
Subsidaire: comment via un webbrowser naviguer au sein de ma page pour
renseigner les champs texte de ladite page ?
Merci à tous.

Dom, qui sèche totalement.

9 réponses

Avatar
ecappa
Salut Dom,

Je n'ai pas encore fait d'essais avec IE7, mais j'ai pas mal utilisé une
technique qui fonctionnait bien avec IE6.
Le truc, c'est d'encapsuler un IE dans ton programme, via le composant
WebBrowser.
Ensuite, par programmation, tu peux afficher une page, en utilisant la
méthode 'Navigate'.
A partir de ce moment là, tu a un certain nombre d'évènement interceptible
par VB, notement le 'BeforeNavigate2', dans lequel tu peux recevoir l'URL qui
vient d'être cliquée dans le navigateur. Un cancel = true te permettra
d'empêcher le navigateur d'aller demander la page désirée et de traiter par
programmation les évènements.

Deuxième élément interessant, tu peux manipuler dynamiquement le DOM qui est
remonté par la page HTML, et donc charger ou lire des champs...
Cela se fait simplement en récupérant le '.Document' du browser instancié,
l'exploration se fait ensuite un peu comme en Javascript (c'est carément le
même principe) via des getElementByName :

Dim mHtmlDom As HTMLDocument
Set mHtmlDom = mbrwser.Document

Dim mForm As HTMLFormElement
Set mForm = mHtmlDom.Forms("[nomDuFormulaire]")

toto = mHtmlDom.getElementsByName("[nomDuChamp]").Item(0).Checked
titi = mHtmlDom.getElementsByName("[nomDuChamp]").Item(0).Value

J'imagine que l'on peut invoquer un 'form.submit' avec la même méthode...

Eric Cappannelli.

"Dom" a écrit :

Bonjour,

Ds mon code VB6, je lance une url (IE7) via un webbrowser. La page php
appelée contient 2 champs texte et un bouton de validation. Je ne parviens
pas à naviguer via VB ds mon browser pour aller "activer" (cliquer) sur le
bouton de validation contenu ds la page php. Quelle pourrait être la
commande pour faire celà ?
Subsidaire: comment via un webbrowser naviguer au sein de ma page pour
renseigner les champs texte de ladite page ?
Merci à tous.

Dom, qui sèche totalement.





Avatar
Dom
Merci bien ecappa de tes infos. Effectivement, je pars aussi d'une
encapsulation de navigateur ds mon form.
Mon pb est exactement le suivant:
J'appelle ds mon navigateur la page php suivante (achat.php):

<form method="POST" action="http://biduletruc/ordre.php">
<table width="300px" cellspacing=1 cellpadding=1 border="1">
<tr>
<td>Opération</td>
<td>Quantité</td>
<td>Frais de courtage</td>
</tr>
<tr>
<td><b>ID société : <input type="text" name="IDS" value=""></b></td>
<td><input type="text" value="" name="QUANT" size="6" maxlength="6"></td>
<td>0,21 %</td>
</tr>
</table>

<input type="hidden" name="ACTION" value="achat">
<input type="submit" value="Confirmer l'ordre">
</form>

Je veux renseigner les champs IDS et QUANT par des valeurs issues d'un
fichier txt (intro.txt), puis valider le tout par l'envoi (click) via le
submit "ACTION" du formulaire php.
Je constate qu'avec mon code les premiers champs st remplis mais je ne
parviens jamais à activer le bouton pour valider l'envoi.

Voici un extrait de mon code VB6:
Private Sub WebBrowser1_GotFocus()

Dim Fic As String
Dim a As String
Dim Diff
Dim Temps
Dim Tps, Tps2

Temps = Time

Diff = DateDiff("s", Tps, Time)
Fic = "c:Intro.txt" <<<<<------------ C'est le fichier texte contenant les
valeurs IDS et QUANT


While Diff < 400000


WebBrowser1.Navigate "c:achat.php" <<<<--------- Ma page php se charge
bien ds mon webbrowser


Do While WebBrowser1.ReadyState <> 4
DoEvents
Loop

Open "c:intro.txt" For Input As #1
While Not EOF(1)
Input #1, a
On Error Resume Next

WebBrowser1.SetFocus <<<<<--------- Est vraiment utile ???????
WebBrowser1.Document.All("IDS").Value = a
<<<<<<<------------------------ Les champs se remplissent des données
provenant du fichier intro.txt
WebBrowser1.Document.All("QUANT").Value = "80000" <<< ------ valeur
constante à ce stade de mes recherches (mais viendra ensuite de mon fichier
intro.txt)

WebBrowser1.Document.All("ACTION").Activate <<<<<--------- Est
vraiment utile ???????
WebBrowser1.Document.All("ACTION").Click
<<<<<<<<<<<<<<<----------------------------- C'est là que ca coince
!!!!!!!!!! (le click n'est jamais validé)

hb_sec_sleep (3) <<<< -------- Fonction d'attente maison (secondes)

Wend
Close 1

Wend


End Sub


Ne serait ce pas le Submit de la page php qui coincerait ? Je ne parviens
pas à mettre le focus sur ce bouton avec mon code VB.

Merci à tous de vos lumières.

Dom
Avatar
ecappa
A mon avis, les focus sur les boutons et les champs textes ne servent à rien...
As-tu essayé un document.forms(mon_form).submit() tout simplement, via le
DOM ?

A+

"Dom" a écrit :

Merci bien ecappa de tes infos. Effectivement, je pars aussi d'une
encapsulation de navigateur ds mon form.
Mon pb est exactement le suivant:
J'appelle ds mon navigateur la page php suivante (achat.php):

<form method="POST" action="http://biduletruc/ordre.php">
<table width="300px" cellspacing=1 cellpadding=1 border="1">
<tr>
<td>Opération</td>
<td>Quantité</td>
<td>Frais de courtage</td>
</tr>
<tr>
<td><b>ID société : <input type="text" name="IDS" value=""></b></td>
<td><input type="text" value="" name="QUANT" size="6" maxlength="6"></td>
<td>0,21 %</td>
</tr>
</table>

<input type="hidden" name="ACTION" value="achat">
<input type="submit" value="Confirmer l'ordre">
</form>

Je veux renseigner les champs IDS et QUANT par des valeurs issues d'un
fichier txt (intro.txt), puis valider le tout par l'envoi (click) via le
submit "ACTION" du formulaire php.
Je constate qu'avec mon code les premiers champs st remplis mais je ne
parviens jamais à activer le bouton pour valider l'envoi.

Voici un extrait de mon code VB6:
Private Sub WebBrowser1_GotFocus()

Dim Fic As String
Dim a As String
Dim Diff
Dim Temps
Dim Tps, Tps2

Temps = Time

Diff = DateDiff("s", Tps, Time)
Fic = "c:Intro.txt" <<<<<------------ C'est le fichier texte contenant les
valeurs IDS et QUANT


While Diff < 400000


WebBrowser1.Navigate "c:achat.php" <<<<--------- Ma page php se charge
bien ds mon webbrowser


Do While WebBrowser1.ReadyState <> 4
DoEvents
Loop

Open "c:intro.txt" For Input As #1
While Not EOF(1)
Input #1, a
On Error Resume Next

WebBrowser1.SetFocus <<<<<--------- Est vraiment utile ???????
WebBrowser1.Document.All("IDS").Value = a
<<<<<<<------------------------ Les champs se remplissent des données
provenant du fichier intro.txt
WebBrowser1.Document.All("QUANT").Value = "80000" <<< ------ valeur
constante à ce stade de mes recherches (mais viendra ensuite de mon fichier
intro.txt)

WebBrowser1.Document.All("ACTION").Activate <<<<<--------- Est
vraiment utile ???????
WebBrowser1.Document.All("ACTION").Click
<<<<<<<<<<<<<<<----------------------------- C'est là que ca coince
!!!!!!!!!! (le click n'est jamais validé)

hb_sec_sleep (3) <<<< -------- Fonction d'attente maison (secondes)

Wend
Close 1

Wend


End Sub


Ne serait ce pas le Submit de la page php qui coincerait ? Je ne parviens
pas à mettre le focus sur ce bouton avec mon code VB.

Merci à tous de vos lumières.

Dom





Avatar
Dom
DOM. Peux tu me dire ce que c'est ???? ;-)
Je vais essayer
Merci



"ecappa" a écrit dans le message de news:

A mon avis, les focus sur les boutons et les champs textes ne servent à
rien...
As-tu essayé un document.forms(mon_form).submit() tout simplement, via le
DOM ?

A+

"Dom" a écrit :

Merci bien ecappa de tes infos. Effectivement, je pars aussi d'une
encapsulation de navigateur ds mon form.
Mon pb est exactement le suivant:
J'appelle ds mon navigateur la page php suivante (achat.php):

<form method="POST" action="http://biduletruc/ordre.php">
<table width="300px" cellspacing=1 cellpadding=1 border="1">
<tr>
<td>Opération</td>
<td>Quantité</td>
<td>Frais de courtage</td>
</tr>
<tr>
<td><b>ID société : <input type="text" name="IDS" value=""></b></td>
<td><input type="text" value="" name="QUANT" size="6" maxlength="6"></td>
<td>0,21 %</td>
</tr>
</table>

<input type="hidden" name="ACTION" value="achat">
<input type="submit" value="Confirmer l'ordre">
</form>

Je veux renseigner les champs IDS et QUANT par des valeurs issues d'un
fichier txt (intro.txt), puis valider le tout par l'envoi (click) via le
submit "ACTION" du formulaire php.
Je constate qu'avec mon code les premiers champs st remplis mais je ne
parviens jamais à activer le bouton pour valider l'envoi.

Voici un extrait de mon code VB6:
Private Sub WebBrowser1_GotFocus()

Dim Fic As String
Dim a As String
Dim Diff
Dim Temps
Dim Tps, Tps2

Temps = Time

Diff = DateDiff("s", Tps, Time)
Fic = "c:Intro.txt" <<<<<------------ C'est le fichier texte contenant
les
valeurs IDS et QUANT


While Diff < 400000


WebBrowser1.Navigate "c:achat.php" <<<<--------- Ma page php se
charge
bien ds mon webbrowser


Do While WebBrowser1.ReadyState <> 4
DoEvents
Loop

Open "c:intro.txt" For Input As #1
While Not EOF(1)
Input #1, a
On Error Resume Next

WebBrowser1.SetFocus <<<<<--------- Est vraiment utile ???????
WebBrowser1.Document.All("IDS").Value = a
<<<<<<<------------------------ Les champs se remplissent des données
provenant du fichier intro.txt
WebBrowser1.Document.All("QUANT").Value = "80000" <<< ------
valeur
constante à ce stade de mes recherches (mais viendra ensuite de mon
fichier
intro.txt)

WebBrowser1.Document.All("ACTION").Activate <<<<<--------- Est
vraiment utile ???????
WebBrowser1.Document.All("ACTION").Click
<<<<<<<<<<<<<<<----------------------------- C'est là que ca coince
!!!!!!!!!! (le click n'est jamais validé)

hb_sec_sleep (3) <<<< -------- Fonction d'attente maison
(secondes)

Wend
Close 1

Wend


End Sub


Ne serait ce pas le Submit de la page php qui coincerait ? Je ne parviens
pas à mettre le focus sur ce bouton avec mon code VB.

Merci à tous de vos lumières.

Dom







Avatar
ecappa
DOM = Document Object Model
C'est une 'sorte' (attention c'est une image) de SDK sur ta page en cours.
En fait, c'est à la fois l'arbre de ton fichier HTML (tu as aussi / et
surtout / des DOM en XML), et toutes les méthodes que tu peux faire dessus
(les .values par exemple)
Tout ce que tu peux manipuler par la programmation.
C'est exactement la même chose que quand tu fais du Javascript un peu avancé.

Sinon, pour ton soucis, je viens de regarder précisément.
Tu as un évènement 'WB_DocumentComplete' qui est émis quand la page a fini
de se charger.
Sur cet évènement tu peux faire tes set de champs (.value) et derrière un
[WB].document.Forms([id_de la forme]).submit
Tout simplement. Le formulaire est alors posté à ton action.
Attention, tu n'as pas d'ID sur ta forme dans ton code HTML, ajoute en un
pour pouvoir faire ton submit de manière précise...

A+

"Dom" a écrit :

DOM. Peux tu me dire ce que c'est ???? ;-)
Je vais essayer
Merci



"ecappa" a écrit dans le message de news:

>A mon avis, les focus sur les boutons et les champs textes ne servent à
>rien...
> As-tu essayé un document.forms(mon_form).submit() tout simplement, via le
> DOM ?
>
> A+
>
> "Dom" a écrit :
>
>> Merci bien ecappa de tes infos. Effectivement, je pars aussi d'une
>> encapsulation de navigateur ds mon form.
>> Mon pb est exactement le suivant:
>> J'appelle ds mon navigateur la page php suivante (achat.php):
>>
>> <form method="POST" action="http://biduletruc/ordre.php">
>> <table width="300px" cellspacing=1 cellpadding=1 border="1">
>> <tr>
>> <td>Opération</td>
>> <td>Quantité</td>
>> <td>Frais de courtage</td>
>> </tr>
>> <tr>
>> <td><b>ID société : <input type="text" name="IDS" value=""></b></td>
>> <td><input type="text" value="" name="QUANT" size="6" maxlength="6"></td>
>> <td>0,21 %</td>
>> </tr>
>> </table>
>>
>> <input type="hidden" name="ACTION" value="achat">
>> <input type="submit" value="Confirmer l'ordre">
>> </form>
>>
>> Je veux renseigner les champs IDS et QUANT par des valeurs issues d'un
>> fichier txt (intro.txt), puis valider le tout par l'envoi (click) via le
>> submit "ACTION" du formulaire php.
>> Je constate qu'avec mon code les premiers champs st remplis mais je ne
>> parviens jamais à activer le bouton pour valider l'envoi.
>>
>> Voici un extrait de mon code VB6:
>> Private Sub WebBrowser1_GotFocus()
>>
>> Dim Fic As String
>> Dim a As String
>> Dim Diff
>> Dim Temps
>> Dim Tps, Tps2
>>
>> Temps = Time
>>
>> Diff = DateDiff("s", Tps, Time)
>> Fic = "c:Intro.txt" <<<<<------------ C'est le fichier texte contenant
>> les
>> valeurs IDS et QUANT
>>
>>
>> While Diff < 400000
>>
>>
>> WebBrowser1.Navigate "c:achat.php" <<<<--------- Ma page php se
>> charge
>> bien ds mon webbrowser
>>
>>
>> Do While WebBrowser1.ReadyState <> 4
>> DoEvents
>> Loop
>>
>> Open "c:intro.txt" For Input As #1
>> While Not EOF(1)
>> Input #1, a
>> On Error Resume Next
>>
>> WebBrowser1.SetFocus <<<<<--------- Est vraiment utile ???????
>> WebBrowser1.Document.All("IDS").Value = a
>> <<<<<<<------------------------ Les champs se remplissent des données
>> provenant du fichier intro.txt
>> WebBrowser1.Document.All("QUANT").Value = "80000" <<< ------
>> valeur
>> constante à ce stade de mes recherches (mais viendra ensuite de mon
>> fichier
>> intro.txt)
>>
>> WebBrowser1.Document.All("ACTION").Activate <<<<<--------- Est
>> vraiment utile ???????
>> WebBrowser1.Document.All("ACTION").Click
>> <<<<<<<<<<<<<<<----------------------------- C'est là que ca coince
>> !!!!!!!!!! (le click n'est jamais validé)
>>
>> hb_sec_sleep (3) <<<< -------- Fonction d'attente maison
>> (secondes)
>>
>> Wend
>> Close 1
>>
>> Wend
>>
>>
>> End Sub
>>
>>
>> Ne serait ce pas le Submit de la page php qui coincerait ? Je ne parviens
>> pas à mettre le focus sur ce bouton avec mon code VB.
>>
>> Merci à tous de vos lumières.
>>
>> Dom
>>
>>
>>





Avatar
Dom
Merci.
Hélas je crains que tout celà dépasse mon pauvre niveau VB.

Dom
Avatar
Dom
Finalement, je ne suis pas si nul que je l'imaginais ....
Avec tes infos et une petite recherche sur google, je suis parvenu à
exploiter ton info.
Et ca marche maintenant.
Merci infiniment !!

Dom
Avatar
Dom
Aie. Pb résiduel !!!! Désolé d'avoir crié victoire trop vite ....
Le submit fait apparaitre un msgbox de confirmation de validation. Ce msgbox
a le focus mais je ne parviens pas à le valider par un simple sendkeys !
Comment donc valider le msgbox apparaissant ? Rageant d'etre coincé par ce
détail ....

extrait:

Open "c:intro.txt" For Input As #1
While Not EOF(1)
Input #1, a
On Error Resume Next

WebBrowser1.SetFocus

WebBrowser1.Document.All("IDS").Value = a
WebBrowser1.Document.All("QUANT").Value = "80000"

For x = 0 To WebBrowser1.Document.Forms.length - 1
For l = 0 To
WebBrowser1.Document.Forms(x).elements.length - 1
If WebBrowser1.Document.Forms(x).elements(l).Type =
"submit" Then
WebBrowser1.Document.Forms(x).elements(l).Click
<<<<<<<<<<<<<<<<<<<<----------------- Ici apparait, après le click, un
msgbox attendant une validation (OK). Ca bloque le déroulement du prg.
unlong = getforegroundwindow()
Debug.Print unlong
SendKeys ("Enter"), 1
<<<<<<<<<<<<< ------------------ Sans effet, et pourtant le msgbox a le
focus ....
hb_sec_sleep (1)
Exit For
End If
Next l
Next x

hb_sec_sleep (1)
Wend
Close 1


Dom
Avatar
ecappannelli
Aïe !
Là par contre j'ai peur que ça soit assez bloquant !
Effectivement j'allais te proposer un sendkeys, mais si ça ne passe
pas...
Essaye un sendkeys d'espace plustôt que entrée ?
De mémoire, je me demande même si c'est bien 'enter' qu'il faut
mettre et pas un code pour les touches spéciales ?
Dernier recours : tu n'as pas la 'main' sur le site en php ?

A+
Eric.

Dom a écrit :

Aie. Pb résiduel !!!! Désolé d'avoir crié victoire trop vite ....
Le submit fait apparaitre un msgbox de confirmation de validation. Ce msg box
a le focus mais je ne parviens pas à le valider par un simple sendkeys !
Comment donc valider le msgbox apparaissant ? Rageant d'etre coincé par ce
détail ....

extrait:

Open "c:intro.txt" For Input As #1
While Not EOF(1)
Input #1, a
On Error Resume Next

WebBrowser1.SetFocus

WebBrowser1.Document.All("IDS").Value = a
WebBrowser1.Document.All("QUANT").Value = "80000"

For x = 0 To WebBrowser1.Document.Forms.length - 1
For l = 0 To
WebBrowser1.Document.Forms(x).elements.length - 1
If WebBrowser1.Document.Forms(x).elements(l).Type =
"submit" Then
WebBrowser1.Document.Forms(x).elements(l).Cli ck
<<<<<<<<<<<<<<<<<<<<----------------- Ici apparait, après le click, un
msgbox attendant une validation (OK). Ca bloque le déroulement du prg.
unlong = getforegroundwindow()
Debug.Print unlong
SendKeys ("Enter"), 1
<<<<<<<<<<<<< ------------------ Sans effet, et pourtant le msgbox a le
focus ....
hb_sec_sleep (1)
Exit For
End If
Next l
Next x

hb_sec_sleep (1)
Wend
Close 1


Dom