This commit is contained in:
nafer committed 2026-03-06 01:34:20 +03:00
1 parent 61e8f7b490
commit 5b9e9ffc29
1 file changed
+22 -30
+22 -30
View File
@@ -85,8 +85,20 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
import urllib.request import urllib.request
import sys import sys
print(f"[{task_id}] Starting Chrome with Remote Debugging on port {REMOTE_DEBUGGING_PORT}...") cdp_url = f"http://127.0.0.1:{REMOTE_DEBUGGING_PORT}"
# 1. Проверяем, не запущен ли уже Chrome с CDP
print(f"[{task_id}] Checking if Chrome is already running with CDP at {cdp_url}...")
chrome_already_running = False
try:
response = urllib.request.urlopen(f"{cdp_url}/json/version", timeout=2)
if response.status == 200:
print(f"[{task_id}] Chrome is already running, connecting to existing instance.")
chrome_already_running = True
except Exception:
print(f"[{task_id}] Chrome not detected at {cdp_url}. Starting new instance...")
if not chrome_already_running:
# Список возможных путей к Chrome # Список возможных путей к Chrome
chrome_exe = None chrome_exe = None
possible_paths = [ possible_paths = [
@@ -105,7 +117,6 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
break break
if not chrome_exe: if not chrome_exe:
# Попробуем найти через shutil
import shutil import shutil
chrome_exe = shutil.which("google-chrome") or shutil.which("chromium") or shutil.which("chromium-browser") chrome_exe = shutil.which("google-chrome") or shutil.which("chromium") or shutil.which("chromium-browser")
@@ -114,10 +125,8 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
print(f"[{task_id}] Using Chrome executable: {chrome_exe}") print(f"[{task_id}] Using Chrome executable: {chrome_exe}")
# Создаем уникальную директорию для профиля (чтобы избежать блокировки) # Используем постоянную директорию для сохранения сессий (логинов)
import uuid user_data_dir = "/app/browser-data/main_profile"
unique_id = str(uuid.uuid4())[:8]
user_data_dir = f"/tmp/browser-data-{unique_id}"
os.makedirs(user_data_dir, exist_ok=True) os.makedirs(user_data_dir, exist_ok=True)
# Запускаем Chrome с remote debugging # Запускаем Chrome с remote debugging
@@ -126,6 +135,7 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
f"--remote-debugging-port={REMOTE_DEBUGGING_PORT}", f"--remote-debugging-port={REMOTE_DEBUGGING_PORT}",
f"--remote-debugging-address=0.0.0.0", f"--remote-debugging-address=0.0.0.0",
f"--user-data-dir={user_data_dir}", f"--user-data-dir={user_data_dir}",
"--remote-allow-origins=*",
"--no-first-run", "--no-first-run",
"--no-default-browser-check", "--no-default-browser-check",
"--disable-extensions", "--disable-extensions",
@@ -138,30 +148,18 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
print(f"[{task_id}] Executing command: {' '.join(chrome_cmd)}") print(f"[{task_id}] Executing command: {' '.join(chrome_cmd)}")
# Запускаем процесс # Запускаем процесс (без блокировки, в фоне)
process = subprocess.Popen( subprocess.Popen(
chrome_cmd, chrome_cmd,
stdout=subprocess.PIPE, stdout=subprocess.DEVNULL,
stderr=subprocess.PIPE, stderr=subprocess.DEVNULL,
text=True start_new_session=True
) )
# Ждем пока Chrome запустится и CDP будет готов # Ждем пока Chrome запустится и CDP будет готов
cdp_ready = False cdp_ready = False
cdp_url = f"http://127.0.0.1:{REMOTE_DEBUGGING_PORT}"
for i in range(30): # Ждем до 30 секунд for i in range(30): # Ждем до 30 секунд
await asyncio.sleep(1) await asyncio.sleep(1)
# Проверяем, не упал ли процесс
if process.poll() is not None:
stdout, stderr = process.communicate()
raise RuntimeError(
f"Chrome process exited unexpectedly with code {process.returncode}.\n"
f"STDOUT: {stdout}\n"
f"STDERR: {stderr}"
)
try: try:
response = urllib.request.urlopen(f"{cdp_url}/json/version", timeout=2) response = urllib.request.urlopen(f"{cdp_url}/json/version", timeout=2)
if response.status == 200: if response.status == 200:
@@ -173,13 +171,7 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
print(f"[{task_id}] Waiting for CDP at {cdp_url}... (attempt {i})") print(f"[{task_id}] Waiting for CDP at {cdp_url}... (attempt {i})")
if not cdp_ready: if not cdp_ready:
# Получаем логи Chrome raise RuntimeError(f"Failed to start Chrome or CDP not ready after 30s at {cdp_url}")
stdout, stderr = process.communicate(timeout=5)
raise RuntimeError(
f"Chrome started but CDP not ready after 30s at {cdp_url}.\n"
f"STDOUT: {stdout}\n"
f"STDERR: {stderr}"
)
# Подключаемся через CDP # Подключаемся через CDP
from browser_use import BrowserConfig from browser_use import BrowserConfig