Abuse-Schutz fertig
Dieser Commit ist enthalten in:
@ -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:
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren