#python #python-2.7 #selenium #selenium-webdriver #selenium-chromedriver
#python #python-2.7 #selenium #selenium-webdriver #selenium-chromedriver
Вопрос:
У меня есть два типа кнопок с одинаковыми классами, идентификаторами и т.д., Но две вещи отличаются. Действие, которое они выполняют, и текст. На одной есть текст «пригласить», на другой — «сообщение». Я хочу что-то сделать, когда это «пригласить», и что-то еще, когда это «сообщение». Вы знаете, что я должен использовать? Если? Или я должен использовать webDriverWait
?
Это HTML-код.
<button aria-label="Invite" class="button m5"> Invite </button>
или
<button aria-label="Message" class="button m5"> Message </button>
Я пробовал что-то подобное и не работает. У вас есть идея, почему?
buttons=driver.find_elements_by_class_name("button m5")
for but in (buttons):
fetch_text=but.text
if "Invite" in fetch_text:
###do somethin
else: ###do somethin
Ответ №1:
Поскольку имя класса одинаково для обоих элементов, вы можете сначала извлечь текст, используя className, а затем поместить условие if в текст и затем действовать соответствующим образом.
Например, в вашем случае это было бы похоже:
fetch_element_text = driver.find_element_by_class_name("button m5").text
if "Invite" in fetch_element_text:
# Operate according to the Invite button
elif "Message" in fetch_element_text:
# Operate according to the Message button
Обновленный ответ:
В соответствии с вашим обновленным вопросом, пожалуйста, попробуйте приведенный ниже xpath для извлечения элементов в цикле:
buttons=driver.find_elements_by_xpath("//button[@class='button m5']")
print(len(buttons))
for button in buttons:
fetch_element_text = button.text
И теперь вы можете задать то же условие if else, что и упомянутое выше.
Комментарии:
1. Спасибо!! Работает отлично!!
2. Вы можете еще раз проверить мой код? Я обновил его и для этого контекста, и не работает.. Есть идея, почему?
3. Что за ошибку вы получаете? И есть ли какая-либо причина, по которой вы используете цикл для получения текста?
4. Если есть только один текст, который вам нужно извлечь, то вам не нужно использовать цикл, так как может быть вероятность, что на одном и том же элементе есть несколько кнопок с одинаковым именем класса, и они затем обновляются в вашем элементе из-за используемого вами цикла.
5. Я использую цикл, потому что у меня есть список кнопок. Прямо сейчас я запускаю код и жду, чтобы получить сообщение об ошибке, когда он найдет кнопку «пригласить».
Ответ №2:
Вы могли бы найти каждую кнопку через xpath:
invite = driver.find_element_by_xpath("//button[@aria-label='Invite']")
print(invite.text) # Invite
message = driver.find_element_by_xpath("//button[@aria-label='Message']")
print(message.text) # Message
Ответ №3:
Вы не можете использовать find_elements_by_class_name
для поиска по нескольким элементам.Пожалуйста, используйте либо xpath
, либо CssSelector
buttons=driver.find_elements_by_xpath("//button[@class='button m5']")
print(len(buttons))
for button in buttons:
fetch_text = button.text
if "Invite" in fetch_text:
print("Invite Button")
else:
print("Massage Button")
или
buttons = driver.find_elements_by_css_selector("button.m5")
print(len(buttons))
for button in buttons:
fetch_text = button.text
if "Invite" in fetch_text:
print("Invite Button")
else:
print("Massage Button")