В соответствии с HTML, которым вы поделились значение из href
и data-drupal-link-system-path
атрибуты явно кажутся динамическими c из-за присутствия значения 2658
. Таким образом, вам нужно создать динамический локатор c для определения местоположения элемента.
Поскольку требуемый элемент является элементом динамического c, чтобы найти и click()
на элементе, вы должны вызвать WebDriverWait для element_to_be_clickable()
, и вы можете использовать одну из следующих Стратегий локатора :
Использование CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li>a[href$='edit'][data-drupal-link-system-path^='node']"))).click()
Использование XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li/a[contains(@href, 'edit') and starts-with(@data-drupal-link-system-path, 'node')][text()='Edit']"))).click()
Примечание : необходимо добавить следующие операции импорта:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Объяснение динам c CSS_SELECTOR
Для рассмотрения только stati c часть атрибутов href
и data-drupal-link-system-path
вы можете использовать следующие подстановочные знаки в css -селекторах :
Таким образом, наиболее гранулированный css_selector будет:
li>a[href$='edit'][data-drupal-link-system-path^='node']
Опыт версия динамического c XPATH
Чтобы рассмотреть только часть * c атрибутов href
и data-drupal-link-system-path
, вы можете использовать следующие функции xpath :
Таким образом, наиболее детализированный xpath будет:
//li/a[contains(@href, 'edit') and starts-with(@data-drupal-link-system-path, 'node')][text()='Edit']
Ссылка
Вы можете найти несколько соответствующих обсуждение в:
tl; dr
Подробное обсуждение NoSuchElementException можно найти в: