[..] Cocher une checkbox sous IE

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
franco
Niveau 6
Niveau 6
Messages : 273
Enregistré le : lun. 03 oct. 2011 21:37
Localisation : Liévin
Contact :
Status : Hors ligne

[..] Cocher une checkbox sous IE

#1

Message par franco » ven. 03 août 2018 09:28

Bonjour.

J'ai décidé de faire un nouveau sujet, car celui là, même s'il s'agit du même lien, est un problème différent...

Je cherche avant tout à cocher une simple checkbox, sur une page web, via IE...

Et j'ai lu qu'il fallait utiliser cette commande : _IEFormElementCheckBoxSelect
-> https://www.autoitscript.fr/autoit3/doc ... Select.htm

Je n'y arrive pas...


Voici le code :
#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=


Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)

GUICtrlCreateLabel("ID", 5, 7.5, 25, 20)
$inputID = GUICtrlCreateInput("", 35, 5, 200, 20)
GUICtrlCreateLabel("MDP", 5, 32.5, 30, 20)

$inputMDP = GUICtrlCreateInput("", 35, 30, 200, 20)



$run_ie = GUICtrlCreateButton("Lancement IE", 5, 65, 120, 20)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

                Case $run_ie

                        $ID = GUICtrlRead($inputID)
                        $MDP = GUICtrlRead($inputMDP)


                        ProcessClose("iexplore.exe")
                        $ClearID = "255"
                        RunWait("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess " & $ClearID)

                        $liens = ""
                        $oIE = _IECreate("https://www.leboncoin.fr/compte/part/mes-annonces/", 0, 1, 1)
                        $hWnd = _IEPropertyGet($oIE, "hwnd")
                        WinSetState($hWnd, "", @SW_MAXIMIZE)

                        $mail_lbc = _IEGetObjByName($oIE, "email")
                        $mdp_lbc = _IEGetObjByName($oIE, "password")
                        _IEPropertySet($mail_lbc, "innertext", $ID)
                        _IEPropertySet($mdp_lbc, "innertext", $MDP)

                        Local $btns = _IETagNameGetCollection($oIE, "button")
                        Local $sTxt = ""
                        For $btn In $btns
                                $sTxt &= $btn.type & "---" & $btn.innertext & @CRLF
                                If $btn.innertext = "Se connecter" Then _IEAction($btn, "click")
                        Next

                        _IELoadWait($oIE)
                        Sleep(2000)

                        $oIE.document.parentwindow.scroll(0, @DesktopHeight * 1000)
                        $oIE.document.body.scroll = "NO"

;~                      Local $chks = _IETagNameGetCollection($oIE, "checkbox")
;~                      Local $sTxt = ""
;~                      For $chk In $chks
;~                              $sTxt &= $chk.type & "---" & $chk.innertext & @CRLF
;~                              If $chk.innertext = "checkbox" Then _IEAction($chk, "click")
;~                      Next

                        $oForm = _IEFormGetCollection($oIE, 0)

                        _IEFormElementCheckBoxSelect($oForm, "on", "", 1, "byValue")
                        _IEFormElementCheckBoxSelect($oForm, "on", "checkbox", 1, "byValue")
                        _IEFormElementCheckBoxSelect($oForm, "on", "TAYdd", 1, "byValue")



;~ _IEFormElementCheckBoxSelect($oForm, "on", "", 0, "byValue")
;~ _IEFormElementCheckBoxSelect($oForm, "", "", 1, "byValue")
;~ _IEFormElementCheckBoxSelect($oForm, "", "", 0, "byValue")


;~ <div class="_1R1eo"><input class="TAYdd" type="checkbox" value="on"></div>

        EndSwitch
WEnd
Et le bout de code qui doit me permettre de cocher la fameuse case :
                        $oForm = _IEFormGetCollection($oIE, 0)

                        _IEFormElementCheckBoxSelect($oForm, "on", "", 1, "byValue")
                        _IEFormElementCheckBoxSelect($oForm, "on", "checkbox", 1, "byValue")
                        _IEFormElementCheckBoxSelect($oForm, "on", "TAYdd", 1, "byValue")
J'ai, au préalable, inspecté l'élément de la checkbox.
Et j'avais obtenu cela :

Code : Tout sélectionner

<div class="_1R1eo"><input class="TAYdd" type="checkbox" value="on"></div>

A mon avis, c'est simple... mais pas pour moi.

Où ai-je fauté ?


Merci :)


PS : j'ai créé ce nouveau sujet afin de dissocier le sujet de départ, car il va surement me servir pour d'autres projets.


++
L'entraide, c'est mon dada ;)

Avatar du membre
franco
Niveau 6
Niveau 6
Messages : 273
Enregistré le : lun. 03 oct. 2011 21:37
Localisation : Liévin
Contact :
Status : Hors ligne

Re: [..] Cocher une checkbox sous IE

#2

Message par franco » ven. 03 août 2018 10:18

Salut.

C'est... résolu, mais je pense que cela n'est pas "propre". :)

Grâce à ce lien : https://stackoverflow.com/questions/245 ... -a-website

You are doing it all wrong. Try reading the help file.

This will work
Local $oInputs = _IETagNameGetCollection($oIE, "div")
For $oInput In $oInputs
    If $oInput.classname == "btn3" Then _IEAction($oInput, "click")
Next
Et j'ai du l'adapté :
1. J'ai remplacé div par input
2. j'ai modifié "btn3" par "TAYdd"
3. Dans cet état, la case se coche et se décoche automatiquement, j'ai donc mi cela dans une boucle, que je ferme une fois la case cochée.
                        While 1
                                Local $oInputs = _IETagNameGetCollection($oIE, "input")
                                For $oInput In $oInputs
                                        If $oInput.classname == "TAYdd" Then
                                                _IEAction($oInput, "click")
                                                ExitLoop
                                        EndIf
                                Next
                                ExitLoop
                        WEnd
Est-ce bon, dans la propreté et la syntaxe ?


++
L'entraide, c'est mon dada ;)

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1452
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [..] Cocher une checkbox sous IE

#3

Message par orax » ven. 03 août 2018 10:21

Je pense que c'est bon. Mais la boucle "while" n'est pas nécessaire.
Local $oInputs = _IETagNameGetCollection($oIE, "input")
For $oInput In $oInputs
        If $oInput.classname == "TAYdd" Then
                _IEAction($oInput, "click")
                ExitLoop
        EndIf
Next



Ton code (du premier message) cherche l'élément <input> dans un formulaire (<form>), mais l'input n'est pas placé entre des balises <form>.
Il y a aussi cette solution.
$oIE.document.querySelector('input.TAYdd').checked = true
La méthode querySelector récupère le premier élément <input> qui a la classe "TAYdd".

On peut aussi écrire le code sur plusieurs lignes :
$oDoc = $oIE.document
$oInput = $oDoc.querySelector('input.TAYdd')
$oInput.checked = true
https://developer.mozilla.org/fr/docs/W ... ment/Input
https://developer.mozilla.org/fr/docs/W ... rySelector
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

Répondre