2
votes

Quel est le bon xpath?

Le html est le même pour l'entrée à l'intérieur d'une table. Il est différencié par le td mais c'est la ligne avant l'entrée. Je peux trouver le td via find_element_by_id ("col3-month46") mais ce n'est pas là que se trouve l'entrée. Comment écrire un xpath qui trouve le td mais passe ensuite à l'entrée?

J'ai essayé d'utiliser xpath (je crois que c'est comme ça que je vais accéder à l'entrée).

<td _ngcontent-c4="" class="text-center ng-pristine ng-valid ng-touched" formarrayname="timedoe" id="col11-month44">
        <!---->
        <input _ngcontent-c4="" max="24" maxlength="4" min="0"  name="Monthtime" size="2"             class="ng-pristine ng-valid ng-touched" type="number">                    
                                        </td>
<td _ngcontent-c4="" class="text-center ng-pristine ng-valid ng-touched" formarrayname="timedoe" id="col3-month45">
         <input _ngcontent-c4="" max="24" maxlength="4" min="0" name="Monthtime" size="2"             class="ng-pristine ng-valid ng-touched" type="number">                    
                                        </td>
<td _ngcontent-c4="" class="text-center ng-pristine ng-valid ng-touched" formarrayname="timedoe" id="col3-month46">
         <input _ngcontent-c4="" max="24" maxlength="4" min="0" name="Monthtime" size="2"             class="ng-pristine ng-valid ng-touched" type="number">                    
                                        </td>

Eh bien, quand je le trouve via l'ID, il dit que ce n'est pas un champ de saisie. Si je devais le trouver via la balise d'entrée, alors avec le sélénium, il n'entrerait qu'à la première instance et non là où je le veux.


1 commentaires

J'ai marqué la réponse de @Kamal en raison de la simplicité, mais la réponse de Frian fonctionne également.


3 Réponses :


2
votes

Vous pouvez trouver l'élément td que vous recherchez, puis rechercher son élément input enfant.

Donc, ce XPath devrait fonctionner pour vous: p >

find_element_by_xpath('//td[@id="col3-month46"]/input')

Et dans Python Selenium:

//td[@id="col3-month46"]/input


1 commentaires

Impressionnant! J'avais le bon xpath, je ne savais tout simplement pas comment y accéder. L'entrée / a fonctionné tho. Je vous remercie.



0
votes

Vous pouvez vérifier votre Xpath avec l'extension Chropath Lorsque vous cliquez sur inspecter et sélectionnez ChroPath, vous verrez votre Xpath:

ICI IL Y A UN LIEN: https://chrome.google.com/webstore/detail/chropnjfhigebomdlkcjo" rel="nofollow noreferrer"> https://chrome.google.com/webstore/detail/chropnjfhigebomdlkcjo" rel="nofollow noreferrer"> https://chrome.google.com/webstore/detail/chropnjfhigef >

VOICI LA CAPTURE D'ÉCRAN: entrez la description de l'image ici

Vous pouvez également copier votre XPath en cliquant sur le bouton Copier Cette extension vous donnera REL XPATH ~ ABS XPATH ~ CSS SELECTOR

ICI IL Y A UN LIEN:

https://chrome.google.com/webstore/netailccmcnjfhigebomdlkcjo" rel="nofollow noreferrer"> https://chrome.google.com/webstore/netailcmfigehcbjbjng

ET CETTE EXTENSION AUSSI POUR FIREFOX ICI EST FIREFOX LINK:

https: // addons. mozilla.org/en-US/firefox/addon/chropath-for-firefox/?src=search


3 commentaires

Cela ne fonctionne pas car il donne le chemin exact et le sélénium ne l'utilise pas.


il fonctionnera surtout son travail sur le chemin des abdos, vous pouvez l'essayer, vous verrez que votre travail se déroule facilement


regardez les autres réponses et le xpath.



2
votes

Il semble que vous vouliez obtenir une entrée avec un identifiant unique dans le parent , vous pouvez utiliser xpath pour y parvenir. Dans votre cas, vous saisissez avez name = Monthtime et le parent a id = col3-month45 , alors essayez cette méthode:

find_element_by_xpath('//input[@name="Monthtime" and ./parent::*[@id="col3-month45"]]')


1 commentaires

J'ai essayé l'autre commentaire (j'avais le xpath au parent) où j'ajoute le "/ input" qui fonctionne mais j'ai aussi essayé votre recommandation. Cela fonctionne également. Je vous remercie.