diff --git a/Dockerfile b/Dockerfile index 64d28f9..3c1e6ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,7 +38,8 @@ RUN pip install --no-cache-dir --root-user-action=ignore \ langchain \ python-dotenv \ setuptools \ - httpx + httpx \ + capsolver-extension-python WORKDIR /app diff --git a/app.py b/app.py index 2c386bb..1c7e7c2 100644 --- a/app.py +++ b/app.py @@ -12,6 +12,14 @@ from browser_use.agent.views import AgentHistoryList import uvicorn from fastapi.responses import HTMLResponse +# Пробуем импортировать capsolver_extension_python +try: + from capsolver_extension_python import Capsolver + CAPSOLVER_EXTENSION_AVAILABLE = True +except ImportError: + CAPSOLVER_EXTENSION_AVAILABLE = False + logger.warning("capsolver_extension_python not installed, CapSolver extension will not work") + # Настройки Remote Debugging REMOTE_DEBUGGING_PORT = int(os.getenv("REMOTE_DEBUGGING_PORT", "9222")) REMOTE_DEBUGGING_ENABLED = os.getenv("REMOTE_DEBUGGING_ENABLED", "false").lower() == "true" @@ -857,13 +865,25 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str): # Добавляем расширение CapSolver для автоматического решения капчи if AUTO_SOLVE_CAPTCHA and CAPSOLVER_API_KEY: - capsolver_ext_path = "/app/capsolver-extension" + # Используем capsolver_extension_python для получения пути к расширению + capsolver_ext_path = None + if CAPSOLVER_EXTENSION_AVAILABLE: + try: + capsolver_ext_path = Capsolver(api_key=CAPSOLVER_API_KEY).load() + logger.info(f"[{task_id}] CapSolver extension loaded via Python wrapper: {capsolver_ext_path}") + except Exception as e: + logger.warning(f"[{task_id}] Failed to load CapSolver via wrapper: {e}") + + # Если не удалось через wrapper, пробуем старый способ + if not capsolver_ext_path or not os.path.exists(capsolver_ext_path): + capsolver_ext_path = "/app/capsolver-extension" + if os.path.exists(capsolver_ext_path): chrome_cmd.extend([ f"--disable-extensions-except={capsolver_ext_path}", f"--load-extension={capsolver_ext_path}", ]) - logger.info(f"[{task_id}] CapSolver extension enabled") + logger.info(f"[{task_id}] CapSolver extension enabled: {capsolver_ext_path}") else: logger.warning(f"[{task_id}] CapSolver extension not found at {capsolver_ext_path}") @@ -1007,10 +1027,21 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str): # Загружаем расширение CapSolver если настроено extensions = [] if AUTO_SOLVE_CAPTCHA and CAPSOLVER_API_KEY: - capsolver_ext_path = "/app/capsolver-extension" + capsolver_ext_path = None + if CAPSOLVER_EXTENSION_AVAILABLE: + try: + capsolver_ext_path = Capsolver(api_key=CAPSOLVER_API_KEY).load() + logger.info(f"CapSolver extension loaded via Python wrapper: {capsolver_ext_path}") + except Exception as e: + logger.warning(f"Failed to load CapSolver via wrapper: {e}") + + # Если не удалось через wrapper, пробуем старый способ + if not capsolver_ext_path or not os.path.exists(capsolver_ext_path): + capsolver_ext_path = "/app/capsolver-extension" + if os.path.exists(capsolver_ext_path): extensions = [capsolver_ext_path] - logger.info("CapSolver extension will be loaded") + logger.info(f"CapSolver extension will be loaded: {capsolver_ext_path}") else: logger.warning(f"CapSolver extension not found at {capsolver_ext_path}")