Bot for Collecting Dataset of Interface Screenshots Before and After Clicks

Answered using ChatGPT 4o by ChatGPT4o

Question:

Сделать бота для сбора датасета (нужно где-то 5000 фото) Бот бегает по сайтам нажимает на любую кнопку и делает скрины изменений интерфейсов и формирует датасет с репозиториями: dataset -images before -images after изображения имеют одинаковые названия, чтобы коннектить изображения из папки до нажатия кнопки и после.import os import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException, ElementClickInterceptedException, TimeoutException

Путь к рабочему столу

desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")

Путь к папке скриншотов

screenshot_folder = os.path.join(desktop_path, "Screenshots")

Создание папки, если она не существует

if not os.path.exists(screenshot_folder): os.makedirs(screenshot_folder)

Инициализация веб-драйвера для Safari

driver = webdriver.Safari()

try: # URL веб-сайта url = "https://www.mtsbank.ru/chastnim-licam/karti/credit-mts-cashback/?scro

Answer:

Для создания бота, который будет собирать скриншоты интерфейсов до и после нажатия кнопок на веб-страницах, можно использовать библиотеку Selenium. Вот пример кода, который выполняет эту задачу:

import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException, ElementClickInterceptedException, TimeoutException

# Путь к рабочему столу
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
# Путь к папке скриншотов
screenshot_folder = os.path.join(desktop_path, "Screenshots")

# Путь к папке для изображений "до" и "после"
before_folder = os.path.join(screenshot_folder, "before")
after_folder = os.path.join(screenshot_folder, "after")

# Создание папок, если они не существуют
os.makedirs(before_folder, exist_ok=True)
os.makedirs(after_folder, exist_ok=True)

# Инициализация веб-драйвера для Safari
driver = webdriver.Safari()

# Список URL для посещения
urls = [
    "https://www.mtsbank.ru/chastnim-licam/karti/credit-mts-cashback/?scro",
    # Добавьте другие URL здесь
]

# Функция для сохранения скриншота
def save_screenshot(folder, name):
    path = os.path.join(folder, name)
    driver.save_screenshot(path)

# Основная логика
try:
    for url in urls:
        driver.get(url)
        time.sleep(2)  # Ожидание загрузки страницы

        # Сохранение скриншота "до"
        before_screenshot_name = f"before_{int(time.time())}.png"
        save_screenshot(before_folder, before_screenshot_name)

        # Поиск и нажатие на первую кнопку
        try:
            button = driver.find_element(By.TAG_NAME, "button")
            button.click()
            time.sleep(2)  # Ожидание изменений на странице

            # Сохранение скриншота "после"
            after_screenshot_name = f"after_{int(time.time())}.png"
            save_screenshot(after_folder, after_screenshot_name)
        except (NoSuchElementException, ElementClickInterceptedException, TimeoutException) as e:
            print(f"Ошибка при обработке {url}: {e}")

finally:
    driver.quit()

Объяснение кода:

  1. Инициализация и настройка:

    • Определяются пути к папкам для сохранения скриншотов.
    • Создаются папки, если они не существуют.
    • Инициализируется веб-драйвер для Safari.
  2. Основная логика:

    • Для каждого URL из списка:
      • Загружается веб-страница.
      • Сохраняется скриншот текущего состояния страницы ("до").
      • Ищется первая кнопка на странице и выполняется клик.
      • Сохраняется скриншот измененного состояния страницы ("после").
  3. Обработка исключений:

    • Обрабатываются возможные исключения, такие как отсутствие кнопки на странице или невозможность выполнения клика.

Примечания:

  • Ожидание загрузки страницы: Время ожидания (time.sleep(2)) может быть увеличено или уменьшено в зависимости от скорости загрузки страниц.
  • Поиск кнопок: В данном примере используется поиск по тегу button. В реальных условиях может потребоваться более сложная логика для поиска нужных элементов.
  • Расширение функционала: Можно добавить больше URL для посещения и более сложную логику для взаимодействия с элементами страницы.

Этот код является базовым примером и может потребовать доработки в зависимости от конкретных требований и особенностей веб-