[..] Cocher une checkbox sous IE

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

[..] Cocher une checkbox sous IE

#1

Message par franco »

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 7
Niveau 7
Messages : 342
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Cocher une checkbox sous IE

#2

Message par franco »

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 : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Cocher une checkbox sous IE

#3

Message par orax »

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