Sélectionner un élément via un autre de même hauteur

Codeur_En_Perdition Messages postés 14 Date d'inscription jeudi 18 juillet 2024 Statut Membre Dernière intervention 23 juillet 2024 - Modifié le 18 juil. 2024 à 16:12
mamiemando Messages postés 33262 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 septembre 2024 - 24 juil. 2024 à 16:31

Bonjour, bonjour,

Dans le but de créer un script de test quotidien d'une application en ligne, je dois cliquer sur certains éléments aléatoirement.

Seulement, l'élément sur lequel je dois cliquer n'est pas identifiÉ clairement (pas d'id unique). 
Il se situe dans une modale, sur laquelle je n'ai pu identifier qu'un seul élément unique. 

Toutefois, cet élément se situe dans une autre div à la même hauteur que celle dans laquelle je dois cliquer.

J'arrive à récupérer des informations dans la bonne modale, mais lorsque je dois cliquer sur l'élément, ça plante car j'ai une floppée d'autres modales identiques en quasiment tous points (en dehors de certains textes et de mon id cible dans un href).

J'ai tenté de cibler mon élément cliquable en comparant la hauteur de la div avec celle dans laquelle je récupère mon id dans le href, mais aussi de créer une boucle qui va passer sur les modales une à une jusqu'à trouver la bonne, le résultat est toujours le même, je ne parviens pas à cliquer sur le bon élément. J'ai l'impression qu'il en prend juste un au hasard qui correspond, ou ne sait pas lequel choisir malgré tout.

Auriez-vous une idée de comment faire? Merci

Le code HTML en question:

<div class="a-modal-scroller a-declarative" data-action="a-floating-close" style="padding-bottom: 0px; visibility: visible;"><div class="a-declarative modal-fixed-height" data-action="identique autres modales" aria-modal="true" role="dialog" aria-labelledby="header-5" id="identique autres modales" style="height: 480px; width: 900px; max-height: none; max-width: none; visibility: visible; position: absolute; margin: 0px; top: 275.5px; left: 232.5px; opacity: 1; transform: translateY(0px);" aria-hidden="false"><span tabindex="0" class="identique autres modales"></span><div class="wrapper" aria-busy="false"><header class="header"><h4 class="header-content" id="identique autres modales">blabla</h4><button data-action="close" class=" a-button-close a-declarative" aria-label="Close"><i class="a-icon a-icon-close"></i></button></header><div class="inner" id="identique autres modales" style="height: 360px; overflow-y: scroll; padding-bottom: 46px;"><div id="identique autres modales">

      <div id="identique autres modales" class="a-box a-alert a-alert-warning" aria-live="polite" aria-atomic="true" style="display: none;"><div class="a-box-inner a-alert-container"><h4 class="a-alert-heading">Erreur</h4><i class="a-icon a-icon-alert"></i><div class="a-alert-content">blabla</div></div></div><div id="identique autres modales" class="a-box a-alert a-alert-warning" aria-live="polite" aria-atomic="true" style="display: none;"><div class="a-box-inner a-alert-container"><h4 class="a-alert-heading">Erreur</h4><i class="a-icon a-icon-alert"></i><div class="a-alert-content">Blabla</div></div></div><div id="identique autres modales" class="a-spinner-wrapper aok-align-center" style="display: none;"><span class="a-spinner a-spinner-medium"></span></div><div id="identique autres modales" style="display: flex;">
        <div id="identique autres modales" class="aok-inline-block aok-align-top">
          <div id="identique autres modales" class="a-spinner-wrapper aok-align-center" style="display: none;"><span class="a-spinner a-spinner-medium"></span></div><img alt="" src="lien image" id="identique autres modalese" style="display: inline;"></div>

        <div id="identique autres modales" class="aok-inline-block">
          <div>
            <a id="identique autres modales" class="a-link-normal" href="lien contenant l'ID unique à cibler" target="_blank">blabla descriptif</a><p id="identique autres modales">par Belkin</p></div>
          <div id="identique autres modales" data-a-expander-name="identique autres modales" data-a-expander-collapsed-height="150" class="a-expander-collapsed-height a-row a-expander-container a-spacing-base a-expander-partial-collapse-container" style="max-height: none; height: 150px;"><div data-expanded="false" class="a-expander-content a-expander-partial-collapse-content" style="padding-bottom: 20px;"><ul class="a-unordered-list a-vertical"><li id="identique autres modales"><span class="a-list-item">Taille : <span id="identique autres modales">one size</span>
                </span></li></ul><ul id="identique autres modales" class="a-unordered-list a-vertical"><li><span class="a-list-item">blabla descriptif</span></li><li><span class="a-list-item">blabla descriptif</span></li><li><span class="a-list-item">blabla descriptif</span></li><li><span class="a-list-item">blabla descriptif</span></li><li><span class="a-list-item">blabla descriptif</span></li><li><span class="a-list-item">blabla descriptif</span></li><li><span class="a-list-item">blabla descriptif</span></li></ul></div><div class="a-expander-header a-expander-partial-collapse-header" style="opacity: 1; display: block;"><div class="a-expander-content-fade"></div><a href="javascript:void(0)" data-c-func-deps="identique autres modales" data-c-type="widget" data-interaction-events="click" aria-expanded="false" role="button" data-action="a-expander-toggle" class="a-declarative" data-a-expander-toggle="identique autres modales" data-c-id="identique autres modales"><i class="a-icon a-icon-extender-expand"></i><span class="a-expander-prompt">Afficher plus</span></a></div></div><div id="identique autres modales"><div class="identique autres modales"><h5>Colour Name</h5><span class="a-dropdown-container"><label class="a-native-dropdown">Colour Name</label><select id="colour-name-select" autocomplete="off" tabindex="-1" class="a-native-dropdown"><option id="colour-name-Blanc-option" value="Blanc">Blanc</option><option id="colour-name-Noir-option" value="Noir">Noir</option><option id="colour-name-Rose-option" value="Rose">Rose</option><option id="colour-name-Bleu-option" value="Bleu">Bleu</option></select>
        <span tabindex="-1" class="a-button a-button-dropdown" style="min-width: 0%;">
           <span class="a-button-inner">
             <span class="a-button-text a-declarative" data-action="a-dropdown-button" role="button" tabindex="0" aria-hidden="true">
               <span class="a-dropdown-label"></span>
               <span class="a-dropdown-prompt">Blanc</span>
             </span>
             <i class="a-icon a-icon-dropdown"></i>
           </span>
        </span>
      </span></div></div>

          <div id="identique autres modales">
            <div class="identique autres modales" id="identique autres modales">Jblabla descriptif<a href="identique autres modales" target="_blank">identique autres modales</a>.</div><span class="a-declarative" data-action="identique autres modales" data-c-type="widget" data-c-func-deps="identique autres modales" data="identique autres modales" data-c-id="identique autres modales"><a href="javascript:void(0)" role="button" class="identique autres modales">blabla<i class="a-icon a-icon"></i></a></span><span id="identique autres modales" class="a-spinner a-spinner-small" style="display: none;"></span><span id="identique autres modales" style="display: inline;">€29.99</span>
          </div>

          <div id="identique autres modales" class="identique autres modales" style="display: none;">blabla</div>
        </div>
      </div>
    </div>
  </div><div class="a-popover-footer"><div class="identique autres modales">
      <span class="a-declarative" data-action="identique autres modales" data-c-type="widget" data-c-func-deps="identique autres modalesl" data-hide-modal="{}" data-c-id="identique autres modales"><span id="identique autres modales" class="a-button a-button-base"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="identique autres modales"><span id="identique autres modales" class="a-button-text" aria-hidden="true">Retour</span></span></span></span><span class="a-declarative" data-action="identique autres modales" data-csa-c-type="widget" data-c-func-deps="identique autres modales" data-request="{}" data-c-id="identique autres modales"><span id="identique autres modales" class="identique autres modales"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="identique autres modales"><span id="identique autres modales" class="a-button-text" aria-hidden="true">Element sur lequel cliquer, au libellé identique par rapport aux autres modales</span></span></span></span></div></div></div><span tabindex="0" class="identique autres modales"></span></div></div>


Windows / Chrome 126.0.0.0

19 réponses

mamiemando Messages postés 33262 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 septembre 2024 7 777
18 juil. 2024 à 16:15

Bonjour,

As-tu regardé BeautifulSoup, qui permet de charger un document XML et d'extraire un élément arbitraire (soit selon un ID, soit selon un tag, soit le k-ème élément imbriqué dans un autre, etc.). Se baser sur le style me paraît très dangereux car s'il change, ton script ne marchera plus.

Si tu veux une réponse plus précise, partage un extrait de code HTML bien formé (dans lequel toutes les balises ouvertes sont fermées, et réciproquement). 

Bonne chance

1