Automated Bot for Collecting 5000 Dataset Images Using Selenium

Answered using ChatGPT 4o by ChatGPT4o

Question:

Сделать бота для сбора датасета (нужно где-то 5000 фото) Бот бегает по сайтам нажимает на любую кнопку и делает скрины изменений интерфейсов и формирует датасет с репозиториями: dataset -images before -images after изображения имеют одинаковые названия, чтобы коннектить изображения из папки до нажатия кнопки и после.

Answer:

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

  1. Установите необходимые библиотеки:
pip install selenium pillow
  1. Напишите скрипт на Python:
import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image

# Настройки для Chrome
chrome_options = Options()
chrome_options.add_argument("--headless")  # Запуск в фоновом режиме
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920,1080")

# Путь к драйверу Chrome
chrome_driver_path = 'path/to/chromedriver'

# Создание папок для хранения изображений
os.makedirs('dataset/images_before', exist_ok=True)
os.makedirs('dataset/images_after', exist_ok=True)

# Функция для сохранения скриншота
def save_screenshot(driver, path):
    driver.save_screenshot(path)
    # Обрезка скриншота до размера окна браузера
    image = Image.open(path)
    image = image.crop((0, 0, driver.execute_script('return window.innerWidth'), driver.execute_script('return window.innerHeight')))
    image.save(path)

# Инициализация драйвера
service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)

# Список URL для посещения
urls = [
    'https://example.com',
    # Добавьте сюда другие URL
]

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

        # Сохранение скриншота до нажатия кнопки
        before_path = f'dataset/images_before/{idx}.png'
        save_screenshot(driver, before_path)

        # Поиск и нажатие на первую кнопку на странице
        buttons = driver.find_elements(By.TAG_NAME, 'button')
        if buttons:
            ActionChains(driver).move_to_element(buttons[0]).click().perform()
            time.sleep(2)  # Ожидание изменений на странице

            # Сохранение скриншота после нажатия кнопки
            after_path = f'dataset/images_after/{idx}.png'
            save_screenshot(driver, after_path)
        else:
            print(f'No buttons found on {url}')

    except Exception as e:
        print(f'Error processing {url}: {e}')

# Закрытие драйвера
driver.quit()

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

  1. Установка библиотек: Устанавливаем selenium для автоматизации браузера и pillow для обработки изображений.
  2. Настройки Chrome: Настраиваем Chrome для работы в фоновом режиме.
  3. Создание папок: Создаем папки для хранения изображений до и после нажатия кнопок.
  4. Функция для сохранения скриншотов: Функция save_screenshot сохраняет скриншот и обрезает его до размера окна браузера.
  5. Инициализация драйвера: Инициализируем драйвер Chrome.
  6. Основной цикл: Проходим по списку URL, делаем скриншоты до и после нажатия кнопок.
  7. Закрытие драйвера: Закрываем драйвер после завершения работы.

Важно:

  • Убедитесь, что у вас установлен ChromeDriver и его путь указан правильно.
  • Добавьте больше URL в список urls для достижения необходимого количества изображений.
  • Обработайте возможные исключения и ошибки, чтобы бот работал стабильно.

Этот скрипт является базовым примером и может потребовать доработки в зависимости от специфики сайтов, которые вы планируете обрабатывать.