From 7625b3a9ad2e769634b67b3a9e1a0aa4c63d25da Mon Sep 17 00:00:00 2001 From: nafer Date: Tue, 10 Mar 2026 15:45:22 +0300 Subject: [PATCH] cap6 --- app.py | 63 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/app.py b/app.py index 2c0a15f..c661283 100644 --- a/app.py +++ b/app.py @@ -963,34 +963,63 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str): if custom_tools is not None: agent_kwargs["tools"] = custom_tools + # Добавляем информацию о капче в промпт, если включено авто-решение + if AUTO_SOLVE_CAPTCHA and CAPSOLVER_API_KEY: + captcha_hint = "\n\nIMPORTANT: If you encounter a CAPTCHA (reCAPTCHA, hCaptcha, or Cloudflare Turnstile), use the solve_captcha tool to automatically solve it. The tool requires CAPSOLVER_API_KEY to be configured." + agent_kwargs["task"] = task + captcha_hint + agent = Agent(**agent_kwargs) # Автоматическое решение капчи перед запуском, если включено if AUTO_SOLVE_CAPTCHA and CAPSOLVER_API_KEY: logger.info(f"[{task_id}] AUTO_SOLVE_CAPTCHA enabled, checking for captcha...") try: - # Получаем страницу через browser_use - from browser_use import BrowserSession - browser_session = BrowserSession(browser=browser) - page = await browser_session.get_current_page() + # Получаем страницу через browser + page = None + try: + # Пробуем получить страницу через CDP + import urllib.request + import json + response = urllib.request.urlopen(f"{cdp_url}/json/list", timeout=5) + targets = json.loads(response.read().decode()) + for target in targets: + if target.get('type') == 'page' and target.get('url', '') not in ['about:blank', 'chrome://newtab/']: + # Найдена страница с URL + logger.info(f"[{task_id}] Found page: {target.get('url')}") + # Подключаемся к странице через Playwright + from playwright.async_api import async_playwright + async with async_playwright() as p: + browser = await p.chromium.connect_over_cdp(cdp_url) + context = browser.contexts[0] if browser.contexts else None + if context: + pages = context.pages + if pages: + page = pages[0] + break + except Exception as e_page: + logger.warning(f"[{task_id}] Could not get page: {e_page}") + if page: logger.info(f"[{task_id}] Page obtained, checking for captcha elements...") # Проверяем наличие капчи - captcha_found = await page.query_selector('[data-sitekey]') - turnstile_found = await page.query_selector('iframe[src*="turnstile"]') - logger.info(f"[{task_id}] Captcha found: {captcha_found}, Turnstile found: {turnstile_found}") - if captcha_found or turnstile_found: - logger.info(f"[{task_id}] CAPTCHA detected, attempting to solve automatically...") - # Вызываем функцию решения капчи - solved = await solve_captcha_with_capsolver(page, CAPSOLVER_API_KEY) - if solved: - logger.info(f"[{task_id}] CAPTCHA solved successfully!") + try: + captcha_found = await page.query_selector('[data-sitekey]') + turnstile_found = await page.query_selector('iframe[src*="turnstile"]') + logger.info(f"[{task_id}] Captcha found: {captcha_found}, Turnstile found: {turnstile_found}") + if captcha_found or turnstile_found: + logger.info(f"[{task_id}] CAPTCHA detected, attempting to solve automatically...") + # Вызываем функцию решения капчи + solved = await solve_captcha_with_capsolver(page, CAPSOLVER_API_KEY) + if solved: + logger.info(f"[{task_id}] CAPTCHA solved successfully!") + else: + logger.warning(f"[{task_id}] Failed to solve CAPTCHA automatically") else: - logger.warning(f"[{task_id}] Failed to solve CAPTCHA automatically") - else: - logger.info(f"[{task_id}] No captcha detected on page") + logger.info(f"[{task_id}] No captcha detected on page") + except Exception as e_check: + logger.warning(f"[{task_id}] Error checking captcha: {e_check}") else: - logger.warning(f"[{task_id}] Could not get page") + logger.warning(f"[{task_id}] Could not get page from browser") except Exception as e: logger.error(f"[{task_id}] Auto-captcha solve failed: {e}") else: