Как выполнить нажатие на кнопку на веб-сайте, если ее селектор постоянно меняется?

Как можно выполнить нажатие на кнопку через веб-автоматизацию, если у кнопки динамически изменяющийся идентификатор (ID), который отличается при каждой загрузке страницы?
  • 4 декабря 2023 г. 13:49
Ответы на вопрос 2
Если кнопка на веб-странице имеет динамический идентификатор, который меняется при каждой загрузке страницы, вам нужно будет найти другой способ локализовать элемент, не зависящий от изменяющегося ID.

Вот несколько альтернативных способов, которые могут использоваться для обнаружения такой кнопки:

1. Текст кнопки:
   Если текст на кнопке уникален и постоянен, вы можете использовать XPath или CSS-селектор, который цепляется за текст. Например, в XPath можно использовать следующее:
   ```xpath
   //button[contains(text(),'Текст кнопки')]
   ```
   Или если кнопка имеет значение в атрибуте `value`:
   ```xpath
   //input[@type='submit' and @value='Текст кнопки']
   ```

2. Позиция в DOM:
   Если структура DOM стабильна, вы можете найти кнопку по ее положению относительно других элементов. Например:
   ```xpath
   //div[@class='some-container']//button
   ```

3. Классы CSS:
   Если у кнопки есть уникальные классы CSS, которые не меняются, их также можно использовать для поиска. Например:
   ```css
   button.unique-class-name
   ```
   Или в XPath:
   ```xpath
   //button[contains(@class,'unique-class-name')]
   ```

4. Соседние элементы:
   Иногда можно использовать элементы, которые находятся рядом с искомой кнопкой. Вы можете найти стабильный соседний элемент, а затем относительно его направиться к кнопке. Например:
   ```xpath
   //label[text()='Название поля:']/following-sibling::button
   ```

5. Использование JavaScript:
   Если вам доступно выполнение JavaScript на странице, вы можете воспользоваться селекторами или методами DOM для поиска элемента, а затем выполнить `.click()`:
   ```javascript
   document.querySelector('button.unique-class-name').click();
   ```

6. Атрибуты, кроме ID:
   Некоторые элементы могут иметь другие атрибуты, которые остаются неизменными, такие как `name`, `data-*`, `aria-label` и т. д. Вы можете использовать эти атрибуты для поиска кнопки.

При выполнении веб-автоматизации через такие инструменты, как Selenium WebDriver, вы можете использовать любой из этих методов для поиска и взаимодействия с элементами на странице и использовать метод `click()` для нажатия на кнопку:

```python
from selenium import webdriver

driver = webdriver.Chrome()  # Или любой другой браузер
driver.get('http://yourwebsite.com')

# Передаем селектор, который подходит для вашей кнопки
button = driver.find_element_by_xpath("//button[contains(@class,'unique-class-name')]")
button.click()
```

В итоге подход к выбору селекторов зависит от конкретной структуры веб-страницы, и возможно вам придется попробовать несколько методов, чтобы найти самый надежный.
Только id меняется? Тогда по css селектору, либо по порядку кнопки среди элементов или по названию кнопки.
Похожие вопросы