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

Как написать парсер, который будет мониторить появление определенного заголовка на сайте (например, "Работа"), затем открывать ссылку, связанную с этим заголовком, и кликать на кнопку "принять", после чего повторять этот процесс после нажатия кнопки "продолжить" из всплывающего диалогового окна парсера?
  • 5 января 2024 г. 18:08
Ответы на вопрос 2
Чтобы выполнить поставленную задачу, можно использовать различные технологии и библиотеки, но одним из популярных и мощных решений является Selenium — инструмент для автоматизации действий веб-браузера.

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

```python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time

# Путь до вебдрайвера (например, chromedriver)
driver_path = '/path/to/chromedriver'

# Инициализируем драйвер
driver = webdriver.Chrome(executable_path=driver_path)

# Функция для мониторинга сайта
def monitor_website(url, title_to_find, link_text, button_selector, continue_button_selector):
    # Открываем сайт
    driver.get(url)

    # Создаем цикл, который будет работать пока не закроем браузер
    while True:
        try:
            # Ждем появления заголовка
            title_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, f"//h1[.='{title_to_find}']")))

            # После появления заголовка ищем и кликаем на ссылку
            link = driver.find_element_by_link_text(link_text)
            link.click()

            # Ждем появления и кликаем на кнопку
            button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, button_selector)))
            button.click()

            # Обрабатываем всплывающее окно
            continue_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, continue_button_selector)))
            continue_button.click()

            # Пауза перед следующим циклом
            time.sleep(1)

        except TimeoutException:
            # Если не нашли элемент в течение заданного времени, заново начинаем цикл
            print("Элемент не найден, пытаемся снова...")
            driver.refresh()  # Обновляем страницу и повторяем попытку

        except Exception as e:
            # В случае других ошибок выводим их в консоль и продолжаем цикл
            print(e)

# Запускаем функцию мониторинга
monitor_website('https://example.com', 'Работа', 'Ссылка_на_работу', '.accept-button', '.continue-button')

# После завершения работы необходимо закрыть браузер
driver.quit()
```

Убедитесь, что вы замените `'/path/to/chromedriver'` на путь к вашему экземпляру chromedriver. Также нужно заменить селекторы и тексты на те, которые соответствуют вашему веб-сайту и задаче.

**Важные моменты:**
- `WebDriverWait` используется для ожидания появления элементов на странице до определенного времени (в примере 10 секунд).
- `expected_conditions` (логические условия) применяются для ожидания определенных условий (например, элемент станет кликабельным).
- XPath и CSS селекторы нужно указать в соответствии с реальной разметкой сайта.
- Вызовы `time.sleep()` можно использовать для задержки между действиями, чтобы не создавать лишнюю нагрузку на сервер и дать время на выполнение скриптов сайта.

Помните, что автоматизация действий в браузере должна проводиться в соот
Надо прочитать документацию по Selenium и в соответствии с прочитанным написать соответствующий код.
Похожие вопросы