2
votes

Rechercher un élément par partie de l'attribut href

J'essaie d'ouvrir automatiquement un menu de contacts sur la page: à titre d'exemple, je vais à la page " http://www.bawnlodge.co.uk/ " - ensuite je voudrais cliquer sur l'onglet "Contact"

GAB J'ai essayé différentes approches comme:

driver.find_element_by_xpath('//a[contains(@href, "onta")]').click()

ou

driver.find_element_by_xpath("//*[contains(text(), 'onta')]").click()

(et quelques similaires)

Cependant, jusqu'à présent, je n'ai pas pu cliquer sur l'élément

Je serais reconnaissant si quelqu'un pouvait m'expliquer pourquoi j'échoue ici: /


0 commentaires

3 Réponses :


0
votes

Essayez WebDriverWait et suivez la stratégie de localisation.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

Vous devez disposer des importations suivantes pour travailler au-dessus du code.

element=WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,'//div[@class="right"]//ul[@id="menu-header-right"]//li/a[contains(.,"Contact")]')))
element.click()


0 commentaires

0
votes

Vous pouvez utiliser un sélecteur css de classe ou d'id plus rapide

WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#menu-item-100 a'))).click()

ou

WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.menu-item-26 a'))).click()

Vous pouvez également simplement concaténer la chaîne "contact" sur " http://www.bawnlodge.co.uk/ " et accédez à cela. Les noms d'onglets à plusieurs mots sont joints par "-", par exemple lodge-bar-et-cuisine . Tout est en minuscules.


0 commentaires

0
votes

Pour appeler cliquez () sur l'élément avec le texte comme CONTACT en utilisant une partie de l'attribut href , vous devez induire WebDriverWait pour le element_to_be_clickable () souhaité et vous pouvez utiliser l'une des Stratégies de localisation :

  • Utilisation de CSS_SELECTOR :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Utilisation de XPATH :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='container']//a[contains(@href, 'contact')]"))).click()
    
  • Remarque : Vous devez ajouter les importations suivantes:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.container a[href*='contact']"))).click()
    


0 commentaires