4
votes

Comment passer la variable Python à l'expression XPath?

Je travaille actuellement sur un script qui imprime l'ID d'un élément Web basé sur un texte donné. Jusqu'à présent, j'ai réussi à faire ceci:

variable = 'my_text'
wait.until(lambda browser: browser.find_element_by_xpath("//*[contains(text(), variable)]"))
ID = browser.find_element_by_xpath("//*[contains(text(), variable)]").get_attribute("id")
print(ID)

Le code fonctionne bien, mais je veux le changer pour qu'il puisse être utilisé pour des chaînes autres que "my_text".

Comment puis-je passer une variable à cette fonction? Quelque chose comme ceci:

wait.until(lambda browser: browser.find_element_by_xpath("//*[contains(text(), 'my_text')]"))
ID = browser.find_element_by_xpath("//*[contains(text(), 'my_text')]").get_attribute("id")
print(ID)

De cette façon, je pourrais assigner n'importe quel texte à la variable et utiliser la même fonction à chaque fois.

Merci!


1 commentaires

Duplicata de stackoverflow.com/questions/48083073/ … . Spoiler: Il n'y a pas de moyen propre de le faire avec le sélénium, vous devez vous fier à l'interpolation ou à la concaténation de chaînes (ce que fait la réponse actuellement acceptée).


4 Réponses :


0
votes

Vous pouvez d'abord formater votre modèle xpath avant de le transmettre à la méthode.

pattern = "//*[contains(text(), %s)]" % variable
ID = browser.find_element_by_xpath(pattern).get_attribute("id")


0 commentaires

3
votes

Essayez d'utiliser le code suivant:

variable = "my_text"
your_needed_xpath = "//*[contains(text(), '{}')]".format(variable)

J'espère que cela vous aidera!


2 commentaires

Cela a très bien fonctionné ... mais je demande: comment cela fonctionne-t-il? Je veux dire ... Je comprends que cela crée la chaîne nécessaire pour xpath, mais comment fonctionne le format (variable) '{}')] ".


@ChiserAlexandru, il s'agit d'une chaîne intégrée en Python: Voici quelques exemples et documentation: docs.python.org/3.4/library/string.html#format-examples



0
votes

Procédez comme suit - placez simplement la variable dans {} et ajoutez un "f" avant la chaîne:

variable = 'my_text'
wait.until(lambda browser: browser.find_element_by_xpath(f'//*[contains(text(), {variable})]'))
ID = browser.find_element_by_xpath(f'//*[contains(text(),{variable})]').get_attribute("id")
print(ID)

Ceci s'appelle interpolation de chaîne .


0 commentaires

1
votes

Vous pouvez également essayer ceci. J'espère que cela fonctionnera.

 variable = 'my_text'
 wait.until(lambda browser: browser.find_element_by_xpath("//*[contains(text(),'" + variable + "')]"))
 ID = browser.find_element_by_xpath("//*[contains(text(),'" + variable + "')]").get_attribute("id")
 print(ID)


0 commentaires