Найти элемент по части атрибута href - PullRequest
2 голосов
/ 13 мая 2019

Я пытаюсь автоматически открыть любое меню контактов на странице: В качестве примера я собираюсь перейти на страницу "http://www.bawnlodge.co.uk/"" - тогда я бы хотел нажать на вкладку "Контакты"

Банкомат Я пробовал различные подходы, такие как:

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

или

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

(и немногие похожие)

однако до сих пор я не смог щелкнуть элемент

Я был бы признателен, если бы кто-нибудь мог объяснить мне, почему я терплю неудачу здесь: /

Ответы [ 3 ]

0 голосов
/ 13 мая 2019

Вы можете использовать более быстрый селектор класса или идентификатора css

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

или

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

Вы также можете просто объединить строку "contact" в "http://www.bawnlodge.co.uk/".

0 голосов
/ 13 мая 2019

Чтобы вызвать click() для элемента с текстом как CONTACT , используя часть атрибута href, вам нужно вызвать WebDriverWait для нужного element_to_be_clickable(), и вы можете использоватьлюбой из следующих Стратегий локаторов :

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.container a[href*='contact']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='container']//a[contains(@href, 'contact')]"))).click()
    
  • Примечание : Вы должны добавить следующие импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 13 мая 2019

Попробуйте WebDriverWait и следующую стратегию поиска.

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()

Для работы над кодом необходимо иметь следующий импорт.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...