Sélectionner un élément via un autre de même hauteur
mamiemando Messages postés 33435 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 décembre 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
- Sélectionner un élément via un autre de même hauteur
- Longueur largeur hauteur ✓ - Forum Loisirs / Divertissements
- Impossible d'ajouter un element au modele instagram - Forum Instagram
- Partager des photos via un lien - Guide
- Qu'est ce qu'une femme fait 3 fois par jour et un homme une fois dans sa vie - Forum Loisirs / Divertissements
- Impossible de copier car cet élément est trop volumineux pour le format du volume - Forum MacOS
19 réponses
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
19 juil. 2024 à 04:08
Salut,
Pas sûr d'avoir tout compris, mais comme proposé par mamiemando, j'utiliserais BS4.
ici avec ta base html:
from bs4 import BeautifulSoup html = '''<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>''' soup = BeautifulSoup(html, "html.parser") for a in soup.find_all('a', href=True): if a['href'].strip() == "lien contenant l'ID unique à cibler": print(a)
Facilement adaptable à ton code.
18 juil. 2024 à 13:20
bonjour,
si j'était toi, je commencerais par partager mon code.
Ensuite, je préciserais sur quoi tu souhaites précisément cliquer.
18 juil. 2024 à 16:04
L'élément sur lequel cliquer est dans la dernière div, c'est le span avec le libellé "Element sur lequel cliquer, au libellé identique par rapport aux autres modales" ici.
L'élément unique est quant à lui ligne 9: href="lien contenant l'ID unique à cibler"
Je n'ai pas le code sous la main actuellement, je pourrais éventuellement l'ajouter plus tard, mais pas certain que cela aide vu qu'il ne fonctionne pas.
18 juil. 2024 à 17:15
Sans ton code, nous ne pouvons pas te guider et te faire progresser dans les technologies que tu utilises.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question18 juil. 2024 à 20:13
Voici pour le code remis en forme :
<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>
En ce qui concerne BeautifulSoup, j'avais vu quelques articles dessus, mais j'avoue ne pas comprendre comment il pourrait s'appliquer à mon cas.
Enfin, pour ce qui est de se baser sur le style, je n'ai pas vraiment le choix, car pour passer à l'étape suivante, je dois absolument passer par le "bouton" indiqué ici comme "Element sur lequel cliquer, au libellé identique par rapport aux autres modales".
Tous les éléments étant identiques, puisque c'est une même modale se répétant X fois, le seul élément distinctif possible pour cibler le bon "bouton" est le href "lien contenant l'ID unique à cibler".
C'est dans ces éléments que se pose tout mon problème, sinon, ce serait bien plus simple xD
18 juil. 2024 à 20:34
En ce qui concerne le code, j'ai tenté:
for modal in modales: try: modal_element_title = modal.find_element(By.XPATH, "//a[@id='id span première div cherchée']") modal_href = modal_element_title.get_attribute("href") if id_element in modal_href: print(f" L'élément correspond à l'id dans la modale.") modal_found = True valider_button = modal.find_element(By.XPATH, ".//span[@id='id seconde div']") # Vérifier si la hauteur de la div correspond à celle de la div contenant l'ASIN produit_div_height = produit_element.size['height'] modal_height = modal.size['height'] # Vérifier si la hauteur de la div correspond à celle de la div href div_height = element.size['height'] modal_height = modal.size['height'] if div_height == modal_height: print(f" Hauteur correspondante") if "a-button-primary-disabled" in element.getAttribute("class"): print(f" Element sur lequel cliquer, au libellé identique par rapport aux autres modales' est désactivé. Ajout à la liste des éléments désactivés.") elements_desactives.add(element_cherche) else: element_button.click() print(f" Bouton 'Element sur lequel cliquer, au libellé identique par rapport aux autres modales' cliqué")
ou encore:
# Comparaison des ID avec les ID des liens dans le bloc de validation href_element = element_element.find_element(By.XPATH, ".//a[contains(@href, '/dp/')]") href_attribute = href_element.get_attribute("href") match_href = re.search(r'/dp/(B\w{9})', href_attribute) if match_href: id_href = id_match_href.group(1) print(f"ID extrait de href : {id_href}") else: print(f"ID non trouvé dans href : {href_attribute}") continue for element in elements: # Comparaison des éléments trouvés avec la liste if element["nom"].lower() in nom_element.lower() or produit["id"] == id_element: print(f" Elément '{nom_element}' correspond à la liste.") # Enregistrement des ASIN non commandables pour ne pas repasser dessus if id_element in elements_desactives: print(f" L'élément '{nom_element}' a déjà été enregistré comme désactivé. Passer au suivant.") continue # Clic sur le bouton "Voir détails" des éléments correspondants à la liste # Sélection par rapport à l'ID voir_details_button = element_element.find_element(By.XPATH, ".//input[@data-id]") try: WebDriverWait(driver,0.5).until(EC.element_to_be_clickable((By.XPATH,".//input[@data-id]"))) voir_details_button.click() time.sleep(0.25) except Exception: driver.execute_script("arguments[0].click();", voir_details_button) time.sleep(0.25) WebDriverWait(driver, 0.5).until(EC.presence_of_element_located((By.ID, "id de la div"))) try: valider_button = WebDriverWait(driver,1).until(EC.element_to_be_clickable((By.ID, "id de la div")))
18 juil. 2024 à 21:24
Tu es certain que c'est ton code complet?
19 juil. 2024 à 11:50
Au lieu de .size['height'], moi j'essaierais
.location.get('y')
18 juil. 2024 à 22:59
Totalement complet non, il est assez long et comme je n'ai pas reçu l'autorisation de mettre les éléments en clair, c'est contraignant à mettre en forme ^^'
Mais en soit, rien de fou avant ça, sur cette partie du moins. J'ai juste une page avec un tableau qui affiche les les éléments dont, pour certains, je dois vérifier la présence (ou non) à partir d'une liste. Une fois un élément correspond trouvé sur la page, je clique sur l'élément pour en afficher les détails et afficher la modale qui me pose problème.
J'ai mis la partie qui vérifie qu'on se trouve dans la bonne modale (spoiler, c'est toujours le cas) et cherche à cliquer sur le bouton pour passer à l'étape suivante.
C'est vraiment cette étape qui bloque, puisque je ne peux cibler le bouton simplement et dois me baser sur le seul élément distinct (le href) qui se trouve dans une autre div. (C'est le seul moyen de confirmer que je suis bien sur les détails du bon élément cherché, pour valider celui-ci et pas un autre). La confirmation de l'élément cherché est bonne et sans erreur, mais impossible de cliquer sur le bon bouton "associé". Selon le code utilisé, j'ai toujours les deux mêmes cas, soit il sélectionne le mauvais bouton sur la page, soit ne sait pas lequel choisir et crashe.
19 juil. 2024 à 10:15
Montre au moins le package que tu utilises.
19 juil. 2024 à 08:10
Ah d'accord, merci.
Je n'avais pas compris son fonctionnement (et je ne suis pas certain d'avoir compris à 100%)
Mais du coup, ce n'est pas grave si certains éléments du html ne sont pas identiques à chaque fois? Justement comme le href ou les textes? Ou à défaut, est-ce possible de l'utiliser avec des variables ou du regex?
19 juil. 2024 à 11:00
Si je devine bien ce que tu nous caches, la page affiche des articles, et, pour chaque article, un bouton.
Tu connais l'ID de l'article, et tu veux cliquer sur le bouton correspondant.
Est-ce exact?
.
Si oui, au lieu de travailler avec les "hauteurs", je travaillerais avec les index. Je chercherais d'abord l'index de l'article. Par exemple, s'il s'agit du second article, il faut cliquer sur le second bouton.
19 juil. 2024 à 11:07
Oui en quelques sorte c'est cela.
Je connais effectivement l'id, je peux le récupérer un peu n'importe où pour le comparer, notamment dans le href.
J'ai déjà essayé avec une boucle pour un fonctionnement similaire, mais sans succès.
Néanmoins, si je comprends ton idée, ce serait de créer une liste/un dictionnaire avec les éléments de l'article pour connaitre leur index, et ensuite venir cliquer sur l'index correspondant?
L'idée semble top, je vais essayer.
19 juil. 2024 à 17:31
Pourquoi faire une liste ou un dictionnaire?
Si tu parcours les articles, tu peux les compter et découvrir l'index de celui qui t'intéresse.
Ensuite tu parcours les boutons et tu t'arrêtes sur celui ayant le bon index.
19 juil. 2024 à 17:39
"en quelque sorte c'est cela". Si ce n'est pas précisément cela, tu devrais expliquer.
Tu as tellement voulu cacher des élements dans le code html que ce que tu montres ne nous permet pas de deviner ce que tu souhaites. Ni de faire des suggestions pour y arriver.
19 juil. 2024 à 21:27
Je pense surtout qu'à ce stade, il faudrait que @Codeur_En_Perdition StatutMembre commence à comprendre comment marche BeautifulSoup (en comprenant la réponse #9 de @yg_be StatutContributeur et comment l'adapter). Parce que là jouer aux devinettes ne permet pas d'aider efficacement ;-)
20 juil. 2024 à 09:19
Je ne pense pas que BeautifulSoup convienne ici. Il utilise Selenium, qui me semble indispensable pour ce qu'il veut obtenir (cliquer sur un bouton, pas sur un lien, probablement parce qu'il y a du code javascript impliqué).
24 juil. 2024 à 16:31
Pourquoi dans ce cas ne pas utiliser les XPaths dans selenium ?
19 juil. 2024 à 11:11
Qu'appelles-tu "la hauteur"? Tous les boutons n'ont-ils pas la même hauteur?
19 juil. 2024 à 11:38
Je me trompe, ou tu nous caches que tu utilises Selenium?
Modifié le 22 juil. 2024 à 12:19
Par hauteur j'entends leur position dans le code, entre parent/enfant.
Ah mais ce n'est pas caché ça, c'est même le but globalement, simuler les actions d'un utilisateur pour vérifier qu'ils ne rencontrerons pas d'incident.
J'utilise actuellement:
import os from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup import time import re
Modifié le 20 juil. 2024 à 12:30
J'ai essayé avec BeautifulSoup, mais sans grand succès, peu importe comment je le mets dans le code, ça me donne le même résultat.
Pour trouver la bonne modale et vérifier l'id dans le href par rapport à l'id trouvé, pas de souci, mais pour le clic sur le bouton, il ne trouve pas :/
Je vous mets le code de base sans BS4:
import os from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import re # Chemin vers votre WebDriver driver_path = r'C:\Program Files\Google\Chrome\chromedriver.exe' # URL des pages à vérifier urls = [ 'url_ à vérifier 1', 'url à vérifier 2' ] # URL de la page de connexion login_url = 'login_url' # Informations de connexion email = 'login' password = 'mdp' # Liste des elements à vérifier element_a_verifier = [ {"nom": "element_1", "id": ""}, {"nom": "element_2", "id": ""}, {"nom": "element_3", "id": ""}, {"nom": "element_4", "id": ""}, {"nom": "element_5", "id": ""}, {"nom": "element_6", "id": ""}, {"nom": "element_7", "id": ""}, {"nom": "element_8", "id": ""}, # ... ] # Dossier de destination pour les captures d'écran screenshot_dir = r'C:\Screen_path' os.makedirs(screenshot_dir, exist_ok=True) # Adresse prédéfinie adresse_expédition = "adresse" adresse_id = "id_adresse" # Ensemble pour mémoriser les éléments dont le bouton "Elément à cliquer" est désactivé elements_desactives = set() def initialiser_driver(): service = Service(driver_path) driver = webdriver.Chrome(service=service) return driver def se_connecter(driver): driver.get(login_url) WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.ID, 'ap_email'))) email_field = driver.find_element(By.ID, 'ap_email') email_field.send_keys(email) continue_button = driver.find_element(By.ID, 'continue') continue_button.click() WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'ap_password'))) password_field = driver.find_element(By.ID, 'ap_password') password_field.send_keys(password) sign_in_button = driver.find_element(By.ID, 'signInSubmit') sign_in_button.click() WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.ID, 'nav-link-accountList'))) def prendre_capture(driver, element_nom, etape): filename = os.path.join(screenshot_dir, f'{element_nom}_{etape}.png') driver.save_screenshot(filename) print(f"Capture d'écran enregistrée: {filename}") def element_a_cliquer(driver, url, elements): driver.get(url) WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, "//body"))) elements_disponibles = WebDriverWait(driver, 3).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='item-tile']"))) print(f"Nombre d'éléments trouvés sur la page : {len(elements_disponibles)}") liste_elements = [] for element_element in elements_disponibles: try: nom_element = element_element.find_element(By.XPATH, ".//span[contains(@class, 'a-truncate')]").text.strip() print(f"Nom de l'élément trouvé : {nom_element}") id_element = element_element.get_attribute("data-id") print(f" ID de l'élément : {id_element}") # Extraction de l'id éléments depuis leur ID id_match = re.search(r'#(B\w{9})#', id_element) if id_match: id_id_element = id_match.group(1) print(f"id extrait de l'ID : {id_id_element}") else: print(f"id non trouvé dans l'ID : {id_element}") continue liste_elements.append((nom_element, id_id_element, element_element)) except Exception as e: print(f"Erreur lors du traitement de l'élément : {e}") prendre_capture(driver, "erreur", 'exception') print(f"Liste des éléments trouvés : {[(nom, id) for nom, id, _ in liste_elements]}") for element_a_verifier in elements: for index, (nom_element, id_id_element, element_element) in enumerate(liste_elements): if element_a_verifier["nom"].lower() in nom_element.lower() or element_a_verifier["id"] == id_id_element: print(f" L'élément '{nom_element}' correspond à la liste.") if id_id_element in elements_desactives: print(f" L'élément '{nom_element}' a déjà été enregistré comme désactivé. Passer au element suivant.") continue voir_details_button = element_element.find_element(By.XPATH, ".//input[@data-id]") try: WebDriverWait(driver, 0.5).until(EC.element_to_be_clickable((By.XPATH, ".//input[@data-id]"))) voir_details_button.click() time.sleep(0.25) except Exception: driver.execute_script("arguments[0].click();", voir_details_button) time.sleep(0.25) WebDriverWait(driver, 0.5).until(EC.presence_of_element_located((By.ID, "details-modal-title"))) try: demander_element_button = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.ID, "details-modal-request-btn"))) # Vérifier la classe du bouton pour voir s'il est désactivé if "disabled" in demander_element_button.get_attribute("class"): print(f" Le bouton 'élément à cliquer' est désactivé pour : {nom_element}. Ajout à la liste des éléments désactivés.") elements_desactives.add(id_id_element) else: driver.execute_script("arguments[0].click();", demander_element_button) print(f" Bouton 'élément à cliquer' cliqué pour : {nom_element}") time.sleep(0.5) # Attendre après le clic sur "élément à cliquer" try: adresse_button = driver.find_element(By.XPATH, f"//input[@value='{adresse_id}']") driver.execute_script("arguments[0].click();", adresse_button) print(f" Adresse sélectionnée : {adresse_expédition}") except Exception as e: print(f" Erreur lors de la sélection de l'adresse : {e}") try: Valider_button = WebDriverWait(driver, 1).until( EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'Valider l'adresse')]")) ) driver.execute_script("arguments[0].click();", Valider_button) print(f" Clic sur 'Valider l'adresse' pour : {nom_element}") print(f" Elément validé : {nom_element}") except Exception as e: print(f" Erreur lors du clic sur 'Valider l'adresse' : {e}") except Exception as e: print(f" Erreur lors du traitement du bouton 'élément à cliquer' pour : {nom_element}. Erreur : {e}") def main(): driver = initialiser_driver() try: se_connecter(driver) index_url = 0 dernier_nombre_elements = 0 while True: url = urls[index_url] print(f"Vérification de la page : {url}") element_a_cliquer(driver, url, elements_a_verifier) nombre_elements_actuel = len(driver.find_elements(By.XPATH, "//div[@class='item-tile']")) if nombre_elements_actuel == dernier_nombre_elements: index_url = (index_url + 1) % len(urls) print("Aucun nouvel élément trouvé. Changement de page.") else: dernier_nombre_elements = nombre_elements_actuel time.sleep(1) except KeyboardInterrupt: print("Arrêt du script par l'utilisateur.") finally: driver.quit() if __name__ == "__main__": main()
Et le plus fonctionnel avec BS4:
import os import re import time from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Chemin vers votre WebDriver driver_path = r'C:\Program Files\Google\Chrome\chromedriver.exe' # URL des pages à vérifier urls = [ 'url_a_verif_1', 'url_a_verif_2' ] # URL de la page de connexion login_url = 'url_connexion' # Informations de connexion email = 'login' password = 'mdp' # Liste des element à vérifier element_a_verifier = [ {"nom": "element_1", "id": ""}, {"nom": "element_2", "id": ""}, {"nom": "element_3", "id": ""}, {"nom": "element_4", "id": ""}, {"nom": "element_5", "id": ""}, {"nom": "element_6", "id": ""}, {"nom": "element_7", "id": ""}, {"nom": "element_8", "id": ""}, # ... ] # Dossier de destination pour les captures d'écran screenshot_dir = r'C:\Screen_path' os.makedirs(screenshot_dir, exist_ok=True) # Adresse prédéfinie adresse = "adresse" adresse_id = "id_adresse" # Ensemble pour mémoriser les éléments dont le bouton "Demander un élément" est désactivé element_desactives = set() def initialiser_driver(): service = Service(driver_path) driver = webdriver.Chrome(service=service) return driver def se_connecter(driver): driver.get(login_url) WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.ID, 'ap_email'))) email_field = driver.find_element(By.ID, 'ap_email') email_field.send_keys(email) continue_button = driver.find_element(By.ID, 'continue') continue_button.click() WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'ap_password'))) password_field = driver.find_element(By.ID, 'ap_password') password_field.send_keys(password) sign_in_button = driver.find_element(By.ID, 'signInSubmit') sign_in_button.click() WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.ID, 'nav-link-accountList'))) def prendre_capture(driver, element_nom, etape): filename = os.path.join(screenshot_dir, f'{element_nom}_{etape}.png') driver.save_screenshot(filename) print(f"Capture d'écran enregistrée: {filename}") def element_a_cliquer(driver, url, element): driver.get(url) WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, "//body"))) # Extraire le contenu HTML avec Selenium html = driver.page_source soup = BeautifulSoup(html, 'html.parser') elements_disponibles = soup.find_all('div', class_='item-tile') print(f"Nombre d'éléments trouvés sur la page : {len(elements_disponibles)}") for element_element in elements_disponibles: try: nom_element = element_element.find('span', class_='a-truncate').text.strip() print(f"Nom de l'élément trouvé : {nom_element}") # Extraire l'id depuis l'attribut data-id id_element = element_element.get('data-id') id_match = re.search(r'#(B\w{9})#', id_element) id_id_element = id_match.group(1) if id_match else None print(f"id extrait de l'ID : {id_id_element}") # Extraire l'id depuis l'attribut href href_element = element_element.find('a', href=True) href_attribute = href_element['href'] id_match_href = re.search(r'/element/(B\w{9})', href_attribute) id_href = id_match_href.group(1) if id_match_href else None print(f"id extrait de href : {id_href}") for element in element: if element["nom"].lower() in nom_element.lower() or element["id"] == id_id_element: print(f" element '{nom_element}' correspond à la liste.") if id_id_element in element_desactives: print(f" L'élément '{nom_element}' a déjà été enregistré comme désactivé. Passer à l'élément suivant.") continue # Clic sur le bouton "Voir détails" des element correspondants à la liste voir_details_button = element_element.find('input', {'data-id': id_id_element}) if voir_details_button: try: driver.execute_script("arguments[0].click();", driver.find_element(By.XPATH, ".//input[@data-id]")) time.sleep(0.25) except Exception: driver.execute_script("arguments[0].click();", voir_details_button) time.sleep(0.25) WebDriverWait(driver, 0.5).until(EC.presence_of_element_located((By.ID, "details-modal-title"))) try: # Récupérer le HTML de la modale html_modal = driver.page_source soup_modal = BeautifulSoup(html_modal, 'html.parser') demander_element_button = soup_modal.find('button', {'id': 'details-modal--request-btn'}) if demander_element_button: if 'disabled' in demander_element_button.get('class', []): print(f" Le bouton 'élément à cliquer' est désactivé pour : {nom_element}. Ajout à la liste des éléments désactivés.") element_desactives.add(id_id_element) else: # Cliquer sur le bouton "Element à cliquer" driver.execute_script("arguments[0].click();", driver.find_element(By.ID, 'details-modal-request-btn')) print(f" Bouton 'élément à cliquer' cliqué pour : {nom_element}") time.sleep(0.5) # Sélectionner l'adresse et valider try: adresse_button = driver.find_element(By.XPATH, f"//input[@value='{adresse_id}']") driver.execute_script("arguments[0].click();", adresse_button) print(f" Adresse sélectionnée : {adresse}") except Exception as e: print(f" Erreur lors de la sélection de l'adresse : {e}") try: Valider_button = WebDriverWait(driver, 1).until( EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'Valider l'adresse')]")) ) driver.execute_script("arguments[0].click();", Valider_button) print(f" Clic sur 'Valider l'adresse' pour : {nom_element}") print(f" Elément validé : {nom_element}") except Exception as e: print(f" Erreur lors du clic sur 'Valider l'adresse' : {e}") except Exception as e: print(f" Erreur lors du traitement du bouton 'Elément à cliquer' pour : {nom_element}. Erreur : {e}") except Exception as e: print(f"Erreur lors du traitement de l'élément : {e}") prendre_capture(driver, "erreur", 'exception') def main(): driver = initialiser_driver() try: se_connecter(driver) index_url = 0 dernier_nombre_element = 0 while True: url = urls[index_url] print(f"Vérification de la page : {url}") element_a_cliquer(driver, url, element_a_verifier) nombre_element_actuel = len(driver.find_elements(By.XPATH, "//div[@class='vvp-item-tile']")) if nombre_element_actuel == dernier_nombre_element: index_url = (index_url + 1) % len(urls) print("Aucun nouvel élément trouvé. Changement de page.") else: dernier_nombre_element = nombre_element_actuel time.sleep(1) except KeyboardInterrupt: print("Arrêt du script par l'utilisateur.") finally: driver.quit() if __name__ == "__main__": main()
Je dois toujours le masquer un minimum, même si je ne comprends pas pourquoi (en dehors des login/mdp évidemment), mais je tiens à mon poste :D
Après, comme indiqué, globalement le code de la page importe peu au final, s'agissant d'un tableau puis d'une modale qui se répète/qui est réutilisée pour l'affichage, tous les éléments sont identiques, en dehors du texte (mais bien trop peu fiable pour se baser dessus) et du href (lien vers la fiche complète du service contenant son id).
Sur la page principale, j'ai un tableau contenant le nom du service, un rapide descriptif et un bouton pour afficher un peu plus de détails.
Ce bouton contenant un id unique, pas de souci jusque là.
Le clic sur ce bouton, affiche la modale avec les détails cités ci-dessus et un bouton pour valider l'élément (et un retour en arrière sur le tableau mais celui-là on s'en moque).
Comme indiqué précédemment, ouvrir la bonne modale et vérifier qu'on a bien ouvert celle que l'on attendait (correspondant à un élément recherché), pas de souci.
La tâche la plus complexe et qui me bloque, c'est d'associer le bon bouton valider au href. En gros, cliquer sur le bouton de la modale ouverte (ou correspondant à l'élément recherché) et pas celui d'une autre ^^'
En finalité, peu importe la façon d'y arriver, que ce soit avec ou sans BeautifulSoup, avec ou sans Javascript, ou même encore en implémentant d'autres langages, le tout est d'arriver à valider l'élément recherché depuis la modale, et ne plus valider le mauvais ou crasher car il ne sait pas lequel prendre.
En attendant, je vais tester avec l'idée de
.location.get('y')
Merci à vous en tout cas.
20 juil. 2024 à 12:06
Ton code a ouvert une modale, et tu veux savoir comment "cliquer" sur un bouton de cette modale?
20 juil. 2024 à 12:37
Oui, c'est cela.
En gros, j'ai le bouton "Sélectionner élément" tout en bas de la modale, et les rares éléments distincts (descriptions et href:/element/{id-element}) éparpillés ailleurs dans la modale.
<div class="a-popover a-popover-modal a-declarative a-popover-modal-fixed-height" data-action="a-popover-a11y" aria-modal="true" role="dialog" aria-labelledby="a-popover-header-5" id="a-popover-5" style="height: 480px; width: 900px; max-height: none; max-width: none; visibility: visible; position: absolute; margin: 0px; top: 404px; left: 148px; opacity: 1; transform: translateY(0px);" aria-hidden="false"><span tabindex="0" class="a-popover-start a-popover-a11y-offscreen"></span> <div class="a-popover-wrapper" aria-busy="false"> <header class="a-popover-header"> <h4 class="a-popover-header-content" id="a-popover-header-5">Détails de l'élément</h4><button data-action="a-popover-close" class=" a-button-close a-declarative" aria-label="Close"><i class="a-icon a-icon-close"></i></button> </header> <div class="a-popover-inner" id="a-popover-content-5" style="height: 360px; overflow-y: scroll; padding-bottom: 46px;"> <div id="details-modal--content"> <div id="details-error-alert" 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">Erreur lors de l'affichage des détails du produit.</div> </div> </div> <div id="error-alert" 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">Indisponible actuellement</div> </div> </div> <div id="details-modal--spinner" class="a-spinner-wrapper aok-align-center" style="display: none;"> <span class="a-spinner a-spinner-medium"></span></div> <div id="details-modal--main" style="display: flex;"> <div id="details-img-container" class="aok-inline-block aok-align-top"> <div id="details-modal--image-spinner" class="a-spinner-wrapper aok-align-center" style="display: none;"><span class="a-spinner a-spinner-medium"></span></div><img alt src="lien image d'illustration" id="details-modal--image" style="display: inline;"> </div> <div id="div-href" class="inline-block"> <div> <a id="details-modal--element-title" class="a-link-normal" href="/element/id-element" target="_blank">description avec détails</a> <p id="details-modal--by-line">par BrosTrend</p> </div> <div id="div-détails" data-a-expander-name="div-détails" 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 id="details-modal-feature-bullets" class="a-unordered-list a-vertical"> <li><span class="a-list">Autres détails</span></li> <li><span class="a-list">Autres détails</span></li> <li><span class="a-list">Autres détails</span></li> <li><span class="a-list">Autres détails</span></li> <li><span class="a-list">Autres détails</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="aui-da-a-expander-toggle" 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="{"allowLinkDefault":true, "expand_prompt":"Afficher plus", "collapse_prompt":"Afficher moins"}" data-c-id="id-retour"><i class="a-icon a-icon-extender-expand"></i><span class="a-expander-prompt">Afficher plus</span></a> </div> </div> <div id="details-modal--variations-container"></div> <div id="details-modal--Tva-value"> <div class="a-popover-preload" id="a-popover-estimatedTvaPopover">Tva estimée<a href="Lien-infos-TVA" target="_blank"></a>. </div><span class="a-declarative" data-action="a-popover" data-c-type="widget" data-c-func-deps="aui-da-a-popover" data-a-popover="{"name":"estimatedTvaPopover","activate":"onclick","position":"triggerBottom","closeButton":"true","dataStrategy":"preload"}" data-c-id="infos-Tva"><a href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative estimated-Tva-label">Valeur fiscale estimée :<i class="a-icon a-icon-popover"></i></a></span><span id="details-modal--Tva-spinner" class="a-spinner a-spinner-small" style="display: none;"></span><span id="details-modal--Tva-value-string" style="display: inline;">€43.99</span> </div> </div> </div> </div> </div> <div class="a-popover-footer"> <div class="modal-footer"> <span class="a-declarative" data-action="hide-modal" data-c-type="widget" data-c-func-deps="aui-da-hide-modal" data-hide-modal="{}" data-c-id="back-btn"><span id="details-modal--back-btn" class="a-button a-button-base"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="details-modal--back-btn"><span id="details-modal--back-btn" class="a-button-text" aria-hidden="true">Retour</span></span></span></span><span class="a-declarative" data-action="request-element" data-c-type="widget" data-c-func-deps="aui-da-request-element" data-request-element="{}" data-c-id="18u9tx-fe9hai-rl3dlu-rz4qe6"><span id="details-modal--request-btn" class="a-button a-button-primary"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="details-modal--request-btn"><span id="details-modal--request-btn" class="a-button-text" aria-hidden="true">Sélectionner élément</span></span></span></span> </div> </div> </div><span tabindex="0" class="a-popover-end a-popover-a11y-offscreen"></span> </div>
Je ne parviens pas à "cliquer" sur le "Sélectionner élément" correspondant à l'élément recherché ( {id_element} dans le href ).
Je suis parti sur du JS pour simuler le clic, mais finalement, peu importe la méthode utilisée, tant que je passe à l'étape suivante avec le bon élément.
20 juil. 2024 à 12:58
Le code html que tu partages n'ouvre aucune modale.
20 juil. 2024 à 13:06
Le code a-t-il fait ce qu'il faut pour que la modale soit affichée?
20 juil. 2024 à 13:52
Pour l'affichage oui, pas de souci, c'est vraiment le bouton de validation qui me bloque
20 juil. 2024 à 14:37
Quelle est l'instruction dans ton code qui affiche la modale?
Comment ouvrir un modale dans le code html que tu partages?
20 juil. 2024 à 15:00
Dans le html elle n'y est pas, c'est le code de la modale justement.
En python, elle est ouverte au "clic" sur le bouton voir détails : partie voir_details_button
20 juil. 2024 à 16:40
Difficile de t'aider si tu ne fournis pas une page html compatible avec le code.
22 juil. 2024 à 19:47
Le code HTML ne donne rien de fou :/
<!-- Tableau--> <div id="items-grid" class="a-section"> <div class="item-tile" data-id="A13V1IB3VIYZZH#ID_element1#A21HP4SEPT9DYY#enrollment.52dcd0a5-8b95-4f09-be9b-91a10c9dc74d" data-img-url="url_image1"> <img alt="" src="image1"> <div class="item-element-title-container"> <a class="a-link-normal" target="_blank" rel="noopener" href="/dp/ID_element1"><span class="a-truncate" data-a-word-break="normal" data-a-max-rows="2" data-a-overflow-marker="&hellip;" style="line-height: 1.3em !important; max-height: 2.6em;" data-a-recalculate="false" data-a-updated="true"><span class="a-truncate-full a-offscreen">Description element 1</span><span class="a-truncate-cut" aria-hidden="true" style="height: 2.6em;">Nom élément 1</span></span></a> </div> <span class="a-button a-button-primary details-btn" id="a-autoid-0"><span class="a-button-inner"><input data-asin="ID_element1" data-is-parent-asin="false" data-id="A13V1IB3VIYZZH#ID_element1#A21HP4SEPT9DYY#enrollment.52dcd0a5-8b95-4f09-be9b-91a10c9dc74d" data-type="VENDOR_TARGETED" class="a-button-input" type="submit" aria-labelledby="a-autoid-0-announce"><span class="a-button-text" aria-hidden="true" id="a-autoid-0-announce">Voir les détails</span></span></span> </div> </div> <div class="item-tile" data-id="A13V1IB3VIYZZH#ID_element2#A21HP4SEPT9DYY#enrollment.8e874818-7d58-458f-8a9b-d635b0b6e568" data-img-url="url_image2"> <div class="item-tile-content"> <img alt="" src="image2"> <div class="item-element-title-container"> <a class="a-link-normal" target="_blank" rel="noopener" href="/dp/ID_element2"><span class="a-truncate" data-a-word-break="normal" data-a-max-rows="2" data-a-overflow-marker="&hellip;" style="line-height: 1.3em !important; max-height: 2.6em;" data-a-recalculate="false" data-a-updated="true"><span class="a-truncate-full a-offscreen">Description element 2 </span><span class="a-truncate-cut" aria-hidden="true" style="height: 2.6em;">Nom element 2</span></span></a> </div> <span class="a-button a-button-primary details-btn" id="a-autoid-1"><span class="a-button-inner"><input data-asin="ID_element2" data-is-parent-asin="false" data-id="A13V1IB3VIYZZH#ID_element2#A21HP4SEPT9DYY#enrollment.8e874818-7d58-458f-8a9b-d635b0b6e568" data-type="VENDOR_TARGETED" class="a-button-input" type="submit" aria-labelledby="a-autoid-1-announce"><span class="a-button-text" aria-hidden="true" id="a-autoid-1-announce">Voir les détails</span></span></span> </div> </div> <div class="item-tile" data-id="A13V1IB3VIYZZH#ID_element3#A21HP4SEPT9DYY#enrollment.4b9bb2eb-edcd-4bc8-bad0-d8aadc58b259" data-img-url="url_image3"> <div class="item-tile-content"> <img alt="" src="image3"> <div class="item-element-title-container"> <a class="a-link-normal" target="_blank" rel="noopener" href="/dp/ID_element3"><span class="a-truncate" data-a-word-break="normal" data-a-max-rows="2" data-a-overflow-marker="&hellip;" style="line-height: 1.3em !important; max-height: 2.6em;" data-a-recalculate="false" data-a-updated="true"><span class="a-truncate-full a-offscreen">Description element 3</span> <span class="a-truncate-cut" aria-hidden="true" style="height: 2.6em;">Nom element 3</span></span></a> </div> <span class="a-button a-button-primary details-btn" id="a-autoid-2"><span class="a-button-inner"><input data-asin="ID_element3" data-is-parent-asin="false" data-id="A13V1IB3VIYZZH#ID_element3#A21HP4SEPT9DYY#enrollment.4b9bb2eb-edcd-4bc8-bad0-d8aadc58b259" data-type="VENDOR_TARGETED" class="a-button-input" type="submit" aria-labelledby="a-autoid-2-announce"><span class="a-button-text" aria-hidden="true" id="a-autoid-2-announce">Voir les détails</span></span></span> </div> </div> <div class="item-tile" data-id="A13V1IB3VIYZZH#ID_element4#A21HP4SEPT9DYY#enrollment.65eb5253-30ed-459b-9ca1-30cf9e36fd29" data-img-url="url_image4"> <div class="item-tile-content"> <img alt="" src="image4"> <div class="item-element-title-container"> <a class="a-link-normal" target="_blank" rel="noopener" href="/dp/ID_element4"><span class="a-truncate" data-a-word-break="normal" data-a-max-rows="2" data-a-overflow-marker="&hellip;" style="line-height: 1.3em !important; max-height: 2.6em;" data-a-recalculate="false" data-a-updated="true"><span class="a-truncate-full a-offscreen">Description element 4</span> <span class="a-truncate-cut" aria-hidden="true" style="height: 2.6em;">Nom element 4</span></span></a> </div> <span class="a-button a-button-primary details-btn" id="a-autoid-3"><span class="a-button-inner"><input data-asin="ID_element4" data-is-parent-asin="false" data-id="A13V1IB3VIYZZH#ID_element4#A21HP4SEPT9DYY#enrollment.65eb5253-30ed-459b-9ca1-30cf9e36fd29" data-type="VENDOR_TARGETED" class="a-button-input" type="submit" aria-labelledby="a-autoid-3-announce"><span class="a-button-text" aria-hidden="true" id="a-autoid-3-announce">Voir les détails</span></span></span> </div> </div> <div class="item-tile" data-id="A13V1IB3VIYZZH#ID_element5#A21HP4SEPT9DYY#enrollment.29722d50-ea96-4d3f-8da6-4bae7abdf8ae" data-img-url="url_image5"> <div class="item-tile-content"> <img alt="" src="image5"> <div class="item-element-title-container"> <a class="a-link-normal" target="_blank" rel="noopener" href="/dp/ID_element5"><span class="a-truncate" data-a-word-break="normal" data-a-max-rows="2" data-a-overflow-marker="&hellip;" style="line-height: 1.3em !important; max-height: 2.6em;" data-a-recalculate="false" data-a-updated="true"><span class="a-truncate-full a-offscreen">Description element 5</span><span class="a-truncate-cut" aria-hidden="true" style="height: 2.6em;">Nom element 5</span></span></a> </div> <span class="a-button a-button-primary details-btn" id="a-autoid-4"><span class="a-button-inner"><input data-asin="ID_element5" data-is-parent-asin="true" data-id="A13V1IB3VIYZZH#ID_element5#A21HP4SEPT9DYY#enrollment.29722d50-ea96-4d3f-8da6-4bae7abdf8ae" data-type="VENDOR_TARGETED" class="a-button-input" type="submit" aria-labelledby="a-autoid-4-announce"><span class="a-button-text" aria-hidden="true" id="a-autoid-4-announce">Voir les détails</span></span></span> </div> </div> </div> <!-- Pop-up adresses--> <span class="a-declarative" data-action="a-modal" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-modal" data-a-modal="{"name":"elementDetailsModal","width":"900","header":"Détails de l'element","footer":"\u003cdiv class=\"modal-footer\">\n \u003cspan class=\"a-declarative\" data-action=\"hide-modal\" data-csa-c-type=\"widget\" data-csa-c-func-deps=\"aui-da-hide-modal\" data-hide-modal=\"{}\">\u003cspan id=\"element-details-modal--back-btn\" class=\"a-button a-button-base\">\u003cspan class=\"a-button-inner\">\u003cinput class=\"a-button-input\" type=\"submit\" aria-labelledby=\"element-details-modal--back-btn-announce\"/>\u003cspan id=\"element-details-modal--back-btn-announce\" class=\"a-button-text\" aria-hidden=\"true\">Retour\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/span>\u003cspan class=\"a-declarative\" data-action=\"request-element\" data-csa-c-type=\"widget\" data-csa-c-func-deps=\"aui-da-request-element\" data-request-element=\"{}\">\u003cspan id=\"element-details-modal--request-btn\" class=\"a-button a-button-primary\">\u003cspan class=\"a-button-inner\">\u003cinput class=\"a-button-input\" type=\"submit\" aria-labelledby=\"element-details-modal--request-btn-announce\"/>\u003cspan id=\"element-details-modal--request-btn-announce\" class=\"a-button-text\" aria-hidden=\"true\">Valider l'élément\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/div>","dataStrategy":"preload","height":"480"}" id="element-details-modal" data-csa-c-id="t4ut2w-pk4jh5-vxxto3-hj4rog" style=""><a href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative aok-hidden"><i class="a-icon a-icon-popover"></i></a></span> <div class="a-popover-preload" id="a-popover-AddressModal"> <div id="vaddress-modal--content"> <h2>Vos adresses</h2> <hr aria-hidden="true" class="a-divider-normal"> <fieldset> <div data-address-id="ID_Adresse_1" data-legacy-address-id="Autre_ID_Adresse_1" class="a-radio a-radio-fancy address-option"><label><input type="radio" name="" value="ID_Adresse_1"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad1_L1</span> <span>, Ad1_ville</span> <span> Ad1_cp</span> </span></label></div> <div data-address-id="ID_Adresse_2" data-legacy-address-id="Autre_ID_Adresse_2" class="a-radio a-radio-fancy address-option"><label><input type="radio" name="" value="ID_Adresse_2"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad2_L1</span> <span>, Ad2_ville</span> <span> Ad2_cp</span> </span></label></div> <div data-address-id="ID_Adresse_3" data-legacy-address-id="Autre_ID_Adresse_3" class="a-radio a-radio-fancy address-option"><label><input type="radio" name="" value="ID_Adresse_3"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad3_L1</span> <span>, Ad3_ville</span> <span> Ad3_cp</span> </span></label></div> <div data-address-id="ID_Adresse_4" data-legacy-address-id="Autre_ID_Adresse_4" class="a-radio a-radio-fancy address-option"><label><input type="radio" name="" value="ID_Adresse_4"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad4_L1</span> <span>, Ad4_ville</span> <span> Ad4_cp</span> </span></label></div> <div data-address-id="ID_Adresse_5" data-legacy-address-id="Autre_ID_Adresse_5" class="a-radio a-radio-fancy address-option"><label><input type="radio" name="" value="ID_Adresse_5"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad5_L1</span> <span>, Ad5_ville</span> <span> Ad5_cp</span> </span></label></div> </fieldset> </div> </div> <!-- Bouton afficher détails--> <span class="a-declarative" data-action="a-modal" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-modal" data-a-modal="{"name":"elementDetailsModal","width":"900","header":"Détails de l'element","footer":"\u003cdiv class=\"modal-footer\">\n \u003cspan class=\"a-declarative\" data-action=\"hide-modal\" data-csa-c-type=\"widget\" data-csa-c-func-deps=\"aui-da-hide-modal\" data-hide-modal=\"{}\">\u003cspan id=\"element-details-modal--back-btn\" class=\"a-button a-button-base\">\u003cspan class=\"a-button-inner\">\u003cinput class=\"a-button-input\" type=\"submit\" aria-labelledby=\"element-details-modal--back-btn-announce\"/>\u003cspan id=\"element-details-modal--back-btn-announce\" class=\"a-button-text\" aria-hidden=\"true\">Retour\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/span>\u003cspan class=\"a-declarative\" data-action=\"request-element\" data-csa-c-type=\"widget\" data-csa-c-func-deps=\"aui-da-request-element\" data-request-element=\"{}\">\u003cspan id=\"element-details-modal--request-btn\" class=\"a-button a-button-primary\">\u003cspan class=\"a-button-inner\">\u003cinput class=\"a-button-input\" type=\"submit\" aria-labelledby=\"element-details-modal--request-btn-announce\"/>\u003cspan id=\"element-details-modal--request-btn-announce\" class=\"a-button-text\" aria-hidden=\"true\">Valider l'élément\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/div>","dataStrategy":"preload","height":"480"}" id="element-details-modal" data-csa-c-id="t4ut2w-pk4jh5-vxxto3-hj4rog" style=""><a href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative aok-hidden"><i class="a-icon a-icon-popover"></i></a></span> <!-- Bouton valider adresse--> <span class="a-declarative" data-action="a-modal" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-modal" data-a-modal="{"name":"AddressModal","width":"600","header":"Sélectionnez l'adresse","footer":"\u003cdiv class=\"modal-footer\">\n \u003cspan class=\"a-declarative\" data-action=\"hide-modal\" data-csa-c-type=\"widget\" data-csa-c-func-deps=\"aui-da-hide-modal\" data-hide-modal=\"{}\">\u003cspan id=\"address-modal--back-btn\" class=\"a-button a-button-base\">\u003cspan class=\"a-button-inner\">\u003cinput class=\"a-button-input\" type=\"submit\" aria-labelledby=\"address-modal--back-btn-announce\"/>\u003cspan id=\"address-modal--back-btn-announce\" class=\"a-button-text\" aria-hidden=\"true\">Retour\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/span>\u003cspan class=\"a-declarative\" data-action=\"address\" data-csa-c-type=\"widget\" data-csa-c-func-deps=\"aui-da-address\" data-address=\"{}\">\u003cspan id=\"address-modal--submit-btn\" class=\"a-button a-button-primary\">\u003cspan class=\"a-button-inner\">\u003cinput class=\"a-button-input\" type=\"submit\" aria-labelledby=\"address-modal--submit-btn-announce\"/>\u003cspan id=\"address-modal--submit-btn-announce\" class=\"a-button-text\" aria-hidden=\"true\">Valider l'adresse\u003cspan id=\"requesting-element-spinner\" class=\"a-spinner a-spinner-small aok-align-center aok-hidden submit-button-spinner\">\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/span>\u003c\/div>","dataStrategy":"preload","height":"280"}" id="address-modal" data-csa-c-id="rctljw-jap54i-g0nn8-me8kyy"><a href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative aok-hidden"><i class="a-icon a-icon-popover"></i></a></span> <script type="text/javascript"> if (window.ue && typeof uet === 'function') { uet('cf'); } </script> <div class="a-modal-scroller a-declarative" data-action="a-popover-floating-close" style="padding-bottom: 0px; visibility: visible;"> <!-- Modale de validation de l'élément sélectionné--> <div class="a-popover a-popover-modal a-declarative a-popover-modal-fixed-height" data-action="a-popover-a11y" aria-modal="true" role="dialog" aria-labelledby="a-popover-header-5" id="a-popover-5" style="height: 480px; width: 900px; max-height: none; max-width: none; visibility: visible; position: absolute; margin: 0px; top: 275.5px; left: 28.5px; opacity: 1; transform: translateY(0px); display: block;" aria-hidden="false"><span tabindex="0" class="a-popover-start a-popover-a11y-offscreen"></span> <div class="a-popover-wrapper" aria-busy="false"> <header class="a-popover-header"> <h4 class="a-popover-header-content" id="a-popover-header-5">Détails de l'élément</h4><button data-action="a-popover-close" class=" a-button-close a-declarative" aria-label="Close"><i class="a-icon a-icon-close"></i></button> </header> <div class="a-popover-inner" id="a-popover-content-5" style="height: 360px; overflow-y: scroll; padding-bottom: 46px;"> <div id="element-details-modal--content"> <div id="element-details-error-alert" 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">Erreur lors de l'affichage des détails de l'élément.</div> </div> </div> <div id="out-of-error-alert" 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">Elément indisponible</div> </div> </div> <div id="element-details-modal--spinner" class="a-spinner-wrapper aok-align-center" style="display: none;"><span class="a-spinner a-spinner-medium"></span></div> <div id="element-details-modal--main" style="display: flex;"> <div id="element-details-img-container" class="aok-inline-block aok-align-top"> <div id="element-details-modal--hero-image-spinner" class="a-spinner-wrapper aok-align-center" style="display: none;"><span class="a-spinner a-spinner-medium"></span></div><img alt="" src="image_element sélectionné" id="element-details-modal--hero-image" style="display: inline;"> </div> <div id="element-details-info-container" class="aok-inline-block"> <div> <a id="element-details-modal--element-title" class="a-link-normal" href="/dp/ID_element sélectionné" target="_blank">Description élément sélectionné</a> <p id="element-details-modal--by-line">...</p> </div> <div id="element-description-expander" data-a-expander-name="element-description-expander-" 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="catalog-size-list-item" style="display: none;"><span class="a-list-item">Autres informations : <span id="catalog-size"></span> </span></li> </ul> <ul id="element-details-modal--feature-bullets" class="a-unordered-list a-vertical"> <li><span class="a-list-item">Descriptif 1 élément sélectionné</span></li> <li><span class="a-list-item">Descriptif 2 élément sélectionné</span></li> <li><span class="a-list-item">Descriptif 3 élément sélectionné</span></li> <li><span class="a-list-item">Descriptif 4 élément sélectionné</span></li> <li><span class="a-list-item">Descriptif 5 élément sélectionné</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-csa-c-func-deps="aui-da-a-expander-toggle" data-csa-c-type="widget" data-csa-interaction-events="click" aria-expanded="false" role="button" data-action="a-expander-toggle" class="a-declarative" data-a-expander-toggle="{"allowLinkDefault":true, "expand_prompt":"Afficher plus", "collapse_prompt":"Afficher moins"}" data-csa-c-id="csbr6x-ovumlx-2kkq2p-3speth"><i class="a-icon a-icon-extender-expand"></i><span class="a-expander-prompt">Afficher plus</span></a> </div> </div> <div id="element-details-modal--variations-container"></div> <div id="element-details-modal--Tva-value"> <div class="a-popover-preload" id="a-popover-TvaPopover">Description TVA<a href="Lien informations TVA" target="_blank">Lien informations TVA</a>.</div> <span class="a-declarative" data-action="a-popover" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-popover" data-a-popover="{"name":"TvaPopover","activate":"onclick","position":"triggerBottom","closeButton":"true","dataStrategy":"preload"}" data-csa-c-id="w64e7j-mjd4m8-eizavm-1q7dmu"><a href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative -Tva-label">Valeur fiscale estimée :<i class="a-icon a-icon-popover"></i></a></span><span id="element-details-modal--Tva-spinner" class="a-spinner a-spinner-small" style="display: none;"></span><span id="element-details-modal--Tva-value-string" style="display: inline;">...</span> </div> <div id="element-details-modal--limited-quantity" class="limited-quantity" style="display: none;">Limité</div> </div> </div> </div> </div> <div class="a-popover-footer"> <div class="modal-footer"> <span class="a-declarative" data-action="hide-modal" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-hide-modal" data-hide-modal="{}" data-csa-c-id="fzysd9-wnqbqy-9jqxln-121ykr"><span id="element-details-modal--back-btn" class="a-button a-button-base"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="element-details-modal--back-btn-announce"><span id="element-details-modal--back-btn-announce" class="a-button-text" aria-hidden="true">Retour</span></span></span></span><span class="a-declarative" data-action="request-element" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-request-element" data-request-element="{}" data-csa-c-id="acxc6t-ewn2ue-bckrxt-g58m9c"><span id="element-details-modal--request-btn" class="a-button a-button-primary"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="element-details-modal--request-btn-announce"><span id="element-details-modal--request-btn-announce" class="a-button-text" aria-hidden="true">Valider élément</span></span></span></span> </div> </div> </div><span tabindex="0" class="a-popover-end a-popover-a11y-offscreen"></span> </div> </div> <!-- Modale de validation de l'adresse--> <div class="a-modal-scroller a-declarative" data-action="a-popover-floating-close" style="padding-bottom: 0px; visibility: hidden;"> <div class="a-popover a-popover-modal a-declarative a-popover-modal-fixed-height" data-action="a-popover-a11y" aria-modal="true" role="dialog" aria-labelledby="a-popover-header-6" id="a-popover-6" style="height: 280px; width: 600px; max-height: none; max-width: none; visibility: hidden; position: absolute; margin: 0px; top: 375.5px; left: 178.5px; opacity: 1; transform: translateY(8px); display: none;" aria-hidden="true"><span tabindex="0" class="a-popover-start a-popover-a11y-offscreen"></span> <div class="a-popover-wrapper" aria-busy="false"> <header class="a-popover-header"> <h4 class="a-popover-header-content" id="a-popover-header-6">Sélectionnez l'adresse</h4> <button data-action="a-popover-close" class=" a-button-close a-declarative" aria-label="Close"><i class="a-icon a-icon-close"></i></button> </header> <div class="a-popover-inner" id="a-popover-content-6" style="height: 160px; overflow-y: scroll; padding-bottom: 46px;"> <div id="address-modal--content"> <h2>Vos adresses</h2> <hr aria-hidden="true" class="a-divider-normal"> <fieldset> <div data-address-id="ID_Adresse_1" data-legacy-address-id="Autre_ID_Adresse_1" class="a-radio a-radio-fancy address-option"> <label><input type="radio" name="" value="ID_Adresse_1"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad1_L1</span> <span>, Ad1_ville</span> <span> Ad1_cp</span> </span></label></div> <div data-address-id="ID_Adresse_2" data-legacy-address-id="Autre_ID_Adresse_2" class="a-radio a-radio-fancy address-option"> <label><input type="radio" name="" value="ID_Adresse_2"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad2_L1</span> <span>, Ad2_ville</span> <span> Ad2_cp</span> </span></label></div> <div data-address-id="ID_Adresse_3" data-legacy-address-id="Autre_ID_Adresse_3" class="a-radio a-radio-fancy address-option"> <label><input type="radio" name="" value="ID_Adresse_3"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad3_L1</span> <span>, Ad3_ville</span> <span> Ad3_cp</span> </span></label></div> <div data-address-id="ID_Adresse_4" data-legacy-address-id="Autre_ID_Adresse_4" class="a-radio a-radio-fancy address-option"> <label><input type="radio" name="" value="ID_Adresse_4"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad4_L1</span> <span>, Ad4_ville</span> <span> Ad4_cp</span> </span></label></div> <div data-address-id="ID_Adresse_5" data-legacy-address-id="Autre_ID_Adresse_5" class="a-radio a-radio-fancy address-option address-selected"><label><input type="radio" name="" value="ID_Adresse_5"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"><strong>Nom Prénom</strong> <span>Ad5_L1</span> <span>, Ad5_ville</span> <span> Ad5_cp</span> </span></label></div> </fieldset> </div> </div> <div class="a-popover-footer"> <div class="modal-footer"> <span class="a-declarative" data-action="hide-modal" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-hide-modal" data-hide-modal="{}" data-csa-c-id="yq057w-efezle-og3vfj-18bhsg"><span id="address-modal--back-btn" class="a-button a-button-base"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="address-modal--back-btn-announce"><span id="address-modal--back-btn-announce" class="a-button-text" aria-hidden="true">Retour</span></span></span></span><span class="a-declarative" data-action="address" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-address" data-address="{}" data-csa-c-id="gpob41-nzf2g3-4gruvh-78wqbs"><span id="address-modal--submit-btn" class="a-button a-button-primary"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="address-modal--submit-btn-announce"><span id="address-modal--submit-btn-announce" class="a-button-text" aria-hidden="true">Valider cette adresse<span id="requesting-element-spinner" class="a-spinner a-spinner-small aok-align-center aok-hidden submit-button-spinner"></span></span></span></span></span> </div> </div> </div><span tabindex="0" class="a-popover-end a-popover-a11y-offscreen"></span> </div> </div>
22 juil. 2024 à 21:28
et donc, avec ce code html, comment ouvrir la modale?
23 juil. 2024 à 09:54
Toujours par le bouton "Voir détails" ;-)