7 votes

Comment accéder au champ de texte en utilisant Selenium lorsque les identifiants principaux sont générés automatiquement

J'ai une table HTML qui affiche des données sur chaque ligne et pour chaque ligne inclut un champ de texte. J'ai un dataframe séparé avec des valeurs que je dois entrer dans la ligne pertinente mais je ne peux pas trouver comment obtenir le bon élément de champ de texte car le nom n'est pas unique.

Je peux obtenir l'élément qui contient 123456/1 donc je peux trouver la ligne contenant la PartA que je veux mais je ne peux pas comprendre comment obtenir l'identifiant du champ de texte id="VALUE.ENTER.SYSTEM.1-XY qui correspond alors à cette ligne. .XY est une valeur numérique qui change en fonction du nombre de lignes de données et je ne peux pas supposer qu'une valeur particulière de XY correspond à la valeur que je veux chercher.

Je ne connais pas la valeur complète de la ligne et les valeurs répertoriées sur la page sont limitées à 50 à la fois donc ce n'est pas parce que je ne la trouve pas une fois que cela ne pourra pas apparaître sur une page ultérieure. Je dois trouver la 1ère ligne dans le tableau, extraire une valeur de celle-ci puis, si j'ai une correspondance dans un autre dataframe, si c'est le cas, je veux ajouter une valeur dans la zone de texte à la fin de la ligne avant de passer à la ligne suivante et de répéter les étapes extract, compare, submit jusqu'à ce que je n'ai plus de lignes.

Toute méthode fiable pour localiser le champ de texte en python qui a

title ="EntrerValeurIci"

Mon Code

for row in rows:
    RowData = row.find_elements_by_tag_name("input")
    for cell in RowData:
        #Obtenir l'ID en question
        if "/" in cell.get_attribute("value"):
            TextToSplit =cell.get_attribute("value")
            PartA,PartB= str(TextToSplit).split("/")
            print(PartA)

Exemple de tableau

                  123456/1

                  BLOGGS JOE

                  1

                   N

                  123456/1

                  BLOGGS JOE

                  1

                   N

                  123456/1

                  BLOGGS JOE

                  1

                   N

1voto

Tarun Lalwani Points 75641

Tout d'abord, vous devez obtenir le TR pour votre code 123456/1. Le xpath serait

//tr[td//input[@name="CODE.SYSTEM.XY"][@value=123456/1]

Ainsi, ci-dessus est pour obtenir l'élément tr qui contient votre élément input. Maintenant, vous voulez que l'entrée soit située à l'intérieur de ce tr, ce qui peut être fait en étendant le XPath à

//tr[td//input[@name="CODE.SYSTEM.XY"][@value=123456/1]/td//input[@title='EnterValueHere']

Updated-1: 30th May 2018

Vous devriez utiliser

//tr[td//input[starts-with(@name, 'CODE.SYSTEM.')][starts-with(@value, '123456/')]/td//input[@title='EnterValueHere']

la première section dit de trouver un tr n'importe où dans le document puis [] condition dit qui a un élément td et un champ input enfant n'importe où qui a un nom d'attribut commençant par CODE.... et une valeur commençant par 12345/ une fois que le tr est trouvé trouvez un autre td à l'intérieur qui a un input avec le titre entervaluehere

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X