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!
4 Réponses :
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")
Essayez d'utiliser le code suivant:
variable = "my_text" your_needed_xpath = "//*[contains(text(), '{}')]".format(variable)
J'espère que cela vous aidera!
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
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 .
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)
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).