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: /
3 Réponses :
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()
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.
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()