2 votes

Sélectionnez une case à cocher avec des variables wih Selenium

L'adresse ci-dessous est l'adresse xpath.

//label[@for="check54490"])

La case à cocher est cochée lorsqu'elle est tapée comme ci-dessous.

driver.find_element_by_xpath('//label[@for="check54490"]').click()

Cependant, il y a de nombreuses cases à cocher qui doivent être cochées, donc je vais les rendre variables et les cocher.

J'ai créé une variable comme ci-dessous, mais une erreur se produit.

umber = [54490]
for num in umber:
    elem = f'//label[@for="check{num}"]'
    elm2 = f"'{elem}'"
    xpath = elem2
driver.find_element_by_xpath(xpath).click()

le message d'erreur est le suivant.

Est-ce que l'approche est bonne ou est-elle impossible dès le départ?

Je vous prie de me donner quelques conseils.

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression driver.find_element_by_xpath('//label[@for="check1000054759"]').click() because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string 'driver.find_element_by_xpath('//label[@for="check54490"]').click()' is not a valid XPath expression.
  (Session info: chrome=90.0.4430.85)

1voto

Dev Points 2296

Plutôt que de le faire dans une boucle for, vous pouvez le faire directement dans le xpath pour une seule valeur comme ci-dessous -

driver.find_element_by_xpath("//label[@for='check" + str(number[0]) + "']")

Maintenant, puisque vous avez demandé comment le faire en cas de plusieurs valeurs, considérez l'exemple de code suivant -

number = [54490, 54490]
for num in number:
    driver.find_element_by_xpath("//label[@for='check" + str(num) + "']").click()

OU vous pouvez avoir chaque nombre dans une variable différente -

xbuttonNum = '54490'
ybuttonNum = '54491'
zbuttonNum = '54521' 

driver.find_element_by_xpath("//label[@for='check" + xbuttonNum + "']").click()
driver.find_element_by_xpath("//label[@for='check" + ybuttonNum + "']").click()
driver.find_element_by_xpath("//label[@for='check" + zbuttonNum + "']").click()

Alternativement, vous pouvez personnaliser votre xpath unique pour tous les éléments et itérer sur eux tous en une seule fois comme ci-dessous -

AllElementwithCheckString =  driver.find_elements_by_xpath("//label[starts-with(@for,'check')]")

for elem in AllElementwithCheckString:
    elem.click()

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