Загрузка данных


import asyncio
import random
import sys
from datetime import datetime
from playwright.async_api import async_playwright

USER_DATA_DIR = "./user_data"
URL = "https://gag.gg/vote"

async def click_vote_button():
    async with async_playwright() as p:
        print(f"[{datetime.now().strftime('%H:%M:%S')}] Запуск браузера...")
        
        # На Windows запускаем в фоновом режиме (headless=True)
        context = await p.chromium.launch_persistent_context(
            user_data_dir=USER_DATA_DIR,
            headless=True,
            args=[
                "--start-maximized",
                "--disable-blink-features=AutomationControlled"
            ]
        )
        
        page = await context.new_page()
        await page.set_extra_http_headers({
            "Accept-Language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7"
        })
        
        try:
            print(f"Переход на {URL}...")
            await page.goto(URL, wait_until="networkidle", timeout=60000)
            await asyncio.sleep(random.uniform(3, 6))
            
            auth_identifiers = ["login", "sign in", "roblox", "авторизоваться", "войти"]
            page_text = (await page.content()).lower()
            if any(id_text in page_text for id_text in auth_identifiers) and "vote" not in page_text:
                print("⚠️ Предупреждение: Возможно, сессия устарела и требуется повторный вход!")

            print("Поиск зеленой кнопки голосования (Like)...")
            
            selectors = [
                "button:has-text('Like')", 
                "button:has-text('Vote')",
                "button.green", 
                "button[class*='like']",
                "button[class*='vote']",
                ".like-button",
                "svg[class*='green']",
                "button:has(svg)"
            ]
            
            vote_button = None
            for selector in selectors:
                try:
                    element = page.locator(selector).first
                    if await element.is_visible(timeout=2000):
                        vote_button = element
                        print(f"Кнопка найдена по селектору: {selector}")
                        break
                except Exception:
                    continue

            if vote_button:
                await vote_button.hover()
                await asyncio.sleep(random.uniform(0.5, 1.5))
                await vote_button.click()
                print(f"[{datetime.now().strftime('%H:%M:%S')}] Успешно проголосовали!")
                await asyncio.sleep(5)
            else:
                print("❌ Кнопка голосования не найдена. Возможно, лимит голосов исчерпан.")
                
        except Exception as e:
            print(f"❌ Произошла ошибка во время выполнения: {e}")
            
        finally:
            await context.close()

async def main():
    print("Бот для GaG.gg запущен и работает на Windows...")
    while True:
        try:
            await click_vote_button()
        except Exception as e:
            print(f"Критическая ошибка в главном цикле: {e}")
        
        delay = 3600 + random.randint(-240, 420)
        next_run_min = delay // 60
        print(f"Следующий цикл через {next_run_min} мин. Ожидание...\n")
        await asyncio.sleep(delay)

if __name__ == "__main__":
    if sys.platform == 'win32':
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(main())