Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Comment selectionner avec selenium pour python le terme exact dans une page web

+1 vote

J’espère que ca sera assez pythonesque : J'ai un cas ou j'ai plusieurs occurrence du même text dans le code html et je souhaiterai sélectionner uniquement un en particulier avec webdriver.selenium
Avec mon code actuellement cela ne fonctionne pas si il n'y qu'une occurence du mot dans la la liste. mais quand la liste contient plusieurs occurences ca ne fonctionne pas

Voila mon code et le html et je voudrai sélectionner uniquement la troisième catégorie, cad "LIT"

  prod = db.select(sql)
  for record in prod:

        cat1       = record[10]
        cat2       = record[11]
        cat3       = record[12]
        cat4       = record[13]

        # loading check
        WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(headerFieldID))

        # cat selection
        driver.find_element_by_xpath(u"//span[contains(text(),'" + cat1 +"')]").click()
        driver.find_element_by_xpath(u"//span[contains(text(),'" + cat2 + "')]").click()

        driver.find_element_by_xpath(u"//span[contains(text(),'" + cat3 + "')]").click()
        driver.find_element_by_xpath(u"//div[@id=\"categContent\"]/div[4]/ul/li/span[contains(text(),'" + cat4 + "')]").click()
        loginButtonElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(loginButtonXpath))
        loginButtonElement.click()

Le code HTML de la page

<div class="prodUnitCat">
<ul class="fixFacetZindex clearBoth" id="divChildrenCategoryFilter_0">
/ul>
<ul data-lvlcat="2">
<li data-idcat="1000015739"><span>ACCESSOIRES LITERIE</span> (9)</li>
<li data-idcat="1000015760"><span>ELEMENT DE LIT</span> (5)</li>
<li data-idcat="1000015773"><span>LIT</span> (9)</li>
<li data-idcat="1000015794"><span>LIT D'APPOINT</span> (2)</li>
</ul>
</div>
demandé 13-Jul-2015 par Andronaute (150 points)
edité 14-Jul-2015 par foxmask

Il y aura peut-être une bonne âme pour te répondre, mais ça m'a plus l'air d'être un problème d'xpath plutot qu'un probleme python.

EDIT: Voila la réponse: en fait il faut eviter d'utiliser contains dans le xpath car il vas essayé de trouver tout les substring contenant la chaine recherche au lieu de ca il faut simpler matcher le text direct comme ceci
driver.findelementby_xpath(u"//span[text()='" + cat2 + "']").click()

Si tu as la solution, propose une réponse et valide ta propore reponse. Ainsi tout à chacun saura que le sujet est clos et qu'une solution existe.

1 Réponse

+3 votes
 
Meilleure réponse

Voila la réponse en fait il faut eviter d'utiliser contains dans le xpath car il vas essayé de trouver tout les substring contenant la chaine recherche au lieu de ca il faut simpler matcher le text direct comme ceci

driver.findelementby_xpath(u"//span[text()='" + cat2 + "']").click()
répondu 14-Jul-2015 par anonyme
sélectionné 14-Jul-2015 par Andronaute
...