Abuse-Schutz fertig

Dieser Commit ist enthalten in:
Claude Project Manager
2025-11-10 03:09:35 +01:00
Ursprung 52dc7b262a
Commit 14eefa18f6
13 geänderte Dateien mit 553 neuen und 33 gelöschten Zeilen

Datei anzeigen

@ -21,7 +21,10 @@ class PlaywrightManager:
"""
Verwaltet Browser-Sitzungen mit Playwright, einschließlich Stealth-Modus und Proxy-Einstellungen.
"""
# Klassen-Variable: Zählt aktive Browser-Instanzen (Feature 5: Browser-Instanz Schutz)
_active_count = 0
def __init__(self,
headless: bool = False,
proxy: Optional[Dict[str, str]] = None,
@ -128,13 +131,23 @@ class PlaywrightManager:
def start(self) -> Page:
"""
Startet die Playwright-Sitzung und gibt die Browser-Seite zurück.
Returns:
Page: Die Browser-Seite
Raises:
RuntimeError: Wenn bereits eine Browser-Instanz aktiv ist
"""
if self.page is not None:
return self.page
# Feature 5: Browser-Instanz Schutz - Nur eine Instanz gleichzeitig
if PlaywrightManager._active_count >= 1:
raise RuntimeError(
"Browser bereits aktiv. Nur eine Browser-Instanz gleichzeitig erlaubt. "
"Beenden Sie den aktuellen Prozess."
)
try:
self.playwright = sync_playwright().start()
@ -240,10 +253,14 @@ class PlaywrightManager:
# Neue Seite erstellen
self.page = self.context.new_page()
# Event-Listener für Konsolen-Logs
self.page.on("console", lambda msg: logger.debug(f"BROWSER CONSOLE: {msg.text}"))
# Feature 5: Browser-Instanz Counter erhöhen
PlaywrightManager._active_count += 1
logger.info(f"Browser gestartet (aktive Instanzen: {PlaywrightManager._active_count})")
return self.page
except Exception as e:
@ -993,7 +1010,12 @@ class PlaywrightManager:
except Exception as e2:
logger.error(f"Force stop fehlgeschlagen: {e2}")
self.playwright = None
# Feature 5: Browser-Instanz Counter dekrementieren
if PlaywrightManager._active_count > 0:
PlaywrightManager._active_count -= 1
logger.info(f"Browser geschlossen (aktive Instanzen: {PlaywrightManager._active_count})")
logger.info("Browser-Sitzung erfolgreich geschlossen")
except Exception as e: