cap6
This commit is contained in:
1 parent
c706116de3
commit
7625b3a9ad
1 file changed
+34
-5
@@ -963,19 +963,46 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
|
|||||||
if custom_tools is not None:
|
if custom_tools is not None:
|
||||||
agent_kwargs["tools"] = custom_tools
|
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)
|
agent = Agent(**agent_kwargs)
|
||||||
|
|
||||||
# Автоматическое решение капчи перед запуском, если включено
|
# Автоматическое решение капчи перед запуском, если включено
|
||||||
if AUTO_SOLVE_CAPTCHA and CAPSOLVER_API_KEY:
|
if AUTO_SOLVE_CAPTCHA and CAPSOLVER_API_KEY:
|
||||||
logger.info(f"[{task_id}] AUTO_SOLVE_CAPTCHA enabled, checking for captcha...")
|
logger.info(f"[{task_id}] AUTO_SOLVE_CAPTCHA enabled, checking for captcha...")
|
||||||
try:
|
try:
|
||||||
# Получаем страницу через browser_use
|
# Получаем страницу через browser
|
||||||
from browser_use import BrowserSession
|
page = None
|
||||||
browser_session = BrowserSession(browser=browser)
|
try:
|
||||||
page = await browser_session.get_current_page()
|
# Пробуем получить страницу через 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:
|
if page:
|
||||||
logger.info(f"[{task_id}] Page obtained, checking for captcha elements...")
|
logger.info(f"[{task_id}] Page obtained, checking for captcha elements...")
|
||||||
# Проверяем наличие капчи
|
# Проверяем наличие капчи
|
||||||
|
try:
|
||||||
captcha_found = await page.query_selector('[data-sitekey]')
|
captcha_found = await page.query_selector('[data-sitekey]')
|
||||||
turnstile_found = await page.query_selector('iframe[src*="turnstile"]')
|
turnstile_found = await page.query_selector('iframe[src*="turnstile"]')
|
||||||
logger.info(f"[{task_id}] Captcha found: {captcha_found}, Turnstile found: {turnstile_found}")
|
logger.info(f"[{task_id}] Captcha found: {captcha_found}, Turnstile found: {turnstile_found}")
|
||||||
@@ -989,8 +1016,10 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
|
|||||||
logger.warning(f"[{task_id}] Failed to solve CAPTCHA automatically")
|
logger.warning(f"[{task_id}] Failed to solve CAPTCHA automatically")
|
||||||
else:
|
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:
|
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:
|
except Exception as e:
|
||||||
logger.error(f"[{task_id}] Auto-captcha solve failed: {e}")
|
logger.error(f"[{task_id}] Auto-captcha solve failed: {e}")
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in new issue
Block a user