Я новичок в кодировании 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")
Любая помощь приветствуется.
В соответствии с 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
Чтобы найти кнопку с текстом, содержащим "Мужской", используйте следующую команду:
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')]")
Ваш XPATH должен быть таким (если вы хотите выбрать кнопку "Мужской"):
//li[span/text()='Male']
Вам нужно использовать find_element_by_id
:
clickGender = browser.find_element_by_id("b27296be-e8da-4d5a-acb6-d1674bf88568")