Поиск элемента с постоянно меняющимся Xpath

1

Я новичок в кодировании Selenium в Python и, я пытаюсь найти эту кнопку через имя, id, xpath, а затем щелкнуть по ней, но ничего не сработало.

Проблема в том, что я не могу найти кнопку, потому что xpath постоянно изменяется, а идентификационное имя - просто "кнопка", которая не может работать так, потому что на странице есть много других кнопок. Как я могу найти элемент?

Вот сайты HTML:

<ul data-componentname="gender">

  <li id="b27296be-e8da-4d5a-acb6-d1674bf88568" class="">
    <input type="button">
    <span>Male</span>
  </li>

  <li id="32bf7074-6b69-41bb-9869-cf71ac42686f" class="">
    <input type="button">
    <span>Female</span>
  </li>

Вот что я пробовал:

clickGender = browser.find_element_by_xpath("b27296be-e8da-4d5a-acb6-d1674bf88568")

Любая помощь приветствуется.

Теги:
web-scraping
selenium
selenium-webdriver
automation

4 ответа

1

В соответствии с HTML, который вы поделили, чтобы найти динамическую кнопку, соответствующую тексту как мужчина или женщина, а затем нажмите на нее, вы должны вызвать WebDriverWait для того, чтобы элемент был доступен для кликов, и вы можете использовать следующее решение:

  • Мужчина:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@data-componentname='gender']//li//span[contains(.,'Male')]//preceding::input[1]"))).click()
    
  • Женский:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@data-componentname='gender']//li//span[contains(.,'Female')]//preceding::input[1]"))).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

Чтобы найти кнопку с текстом, содержащим "Мужской", используйте следующую команду:

driver.find_element_by_xpath("//li[contains(string(), 'Male')]/input[contains(@type,'button')]")

Чтобы найти кнопку с текстом, содержащим "Женщина", используйте следующую команду:

 driver.find_element_by_xpath("//li[contains(string(), 'Female')]/input[contains(@type,'button')]")
0

Ваш XPATH должен быть таким (если вы хотите выбрать кнопку "Мужской"):

//li[span/text()='Male']
0

Вам нужно использовать find_element_by_id:

clickGender = browser.find_element_by_id("b27296be-e8da-4d5a-acb6-d1674bf88568")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню