Page 1 sur 1

[..] Cocher une checkbox sous IE

Posté : ven. 03 août 2018 10:28
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.


++

Re: [..] Cocher une checkbox sous IE

Posté : ven. 03 août 2018 11:18
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 ?


++

Re: [..] Cocher une checkbox sous IE

Posté : ven. 03 août 2018 11:21
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