Я хочу найти и нажать кнопку на странице по имени или тексту. HTML:
<input name = "ppw-widgetEvent:SetPaymentPlanSelectContinueEvent" class = "a-button-input a-button-text" type = "submit" aria-labelledby = "pp-NKOnMC-86-announce">
Испытания кода:
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.NAME, "name']"))).click()
PS: я думаю, что элемент динамический, и на странице остаются 2 кнопки с той же функцией и именем, поэтому я не могу использовать элемент по имени.
Кнопка вот такая:
<input name = "ppw-widgetEvent:SetPaymentPlanSelectContinueEvent" class = "a-button-input a-button-text" type = "submit" aria-labeledby = "pp-NKOnMC-86-announce">
Я думаю, что это динамично, и на странице остаются 2 кнопки с той же функцией и именем, поэтому я не могу использовать элемент по имени...
В случае, если на странице есть 2 кнопки с одинаковым атрибутом name, вам нужно объединить некоторые уникальные атрибуты при создании локатора, который будет однозначно идентифицировать WebElement в DOM-дереве.
Чтобы нажать на элемент, вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать одну из следующих стратегий локатора:
Использование CSS_SELECTOR:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.a-button-input.a-button-text[name='ppw-widgetEvent:SetPaymentPlanSelectContinueEvent'][aria-labelledby$='announce']"))).click()
Использование XPATH:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='a-button-input a-button-text' and @name='ppw-widgetEvent:SetPaymentPlanSelectContinueEvent'][contains(@aria-labelledby, 'announce')]"))).click()
Примечание. Вы должны добавить следующие импорты:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Для поиска элемента по имени необходимо, чтобы элемент имел атрибут имени, например, <input type = "button" name = "foo">.