Initial commit
Dieser Commit ist enthalten in:
329
social_networks/x/x_workflow.py
Normale Datei
329
social_networks/x/x_workflow.py
Normale Datei
@ -0,0 +1,329 @@
|
||||
# social_networks/x/x_workflow.py
|
||||
|
||||
"""
|
||||
X (Twitter) Workflow - Definiert die Arbeitsabläufe für X-Automatisierung
|
||||
"""
|
||||
|
||||
from typing import Dict, List, Any
|
||||
|
||||
class XWorkflow:
|
||||
"""
|
||||
Definiert strukturierte Workflows für verschiedene X-Operationen.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def get_registration_workflow() -> Dict[str, Any]:
|
||||
"""
|
||||
Gibt den Workflow für die Account-Registrierung zurück.
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Workflow-Definition
|
||||
"""
|
||||
return {
|
||||
"name": "X Account Registration",
|
||||
"steps": [
|
||||
{
|
||||
"id": "navigate",
|
||||
"name": "Navigate to X",
|
||||
"description": "Zur X-Startseite navigieren",
|
||||
"required": True,
|
||||
"retry_count": 3
|
||||
},
|
||||
{
|
||||
"id": "cookie_banner",
|
||||
"name": "Handle Cookie Banner",
|
||||
"description": "Cookie-Banner akzeptieren falls vorhanden",
|
||||
"required": False,
|
||||
"retry_count": 1
|
||||
},
|
||||
{
|
||||
"id": "create_account",
|
||||
"name": "Click Create Account",
|
||||
"description": "Account erstellen Button klicken",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "fill_initial_form",
|
||||
"name": "Fill Initial Form",
|
||||
"description": "Name und E-Mail eingeben",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "enter_birthday",
|
||||
"name": "Enter Birthday",
|
||||
"description": "Geburtsdatum auswählen",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "next_birthday",
|
||||
"name": "Continue After Birthday",
|
||||
"description": "Weiter nach Geburtsdatum klicken",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "next_settings",
|
||||
"name": "Continue Settings",
|
||||
"description": "Weiter in Einstellungen klicken",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "email_verification",
|
||||
"name": "Email Verification",
|
||||
"description": "E-Mail-Verifizierungscode eingeben",
|
||||
"required": True,
|
||||
"retry_count": 3
|
||||
},
|
||||
{
|
||||
"id": "set_password",
|
||||
"name": "Set Password",
|
||||
"description": "Passwort festlegen",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "skip_profile_picture",
|
||||
"name": "Skip Profile Picture",
|
||||
"description": "Profilbild überspringen",
|
||||
"required": False,
|
||||
"retry_count": 1
|
||||
},
|
||||
{
|
||||
"id": "skip_username",
|
||||
"name": "Skip Username",
|
||||
"description": "Benutzername überspringen",
|
||||
"required": False,
|
||||
"retry_count": 1
|
||||
},
|
||||
{
|
||||
"id": "skip_notifications",
|
||||
"name": "Skip Notifications",
|
||||
"description": "Benachrichtigungen überspringen",
|
||||
"required": False,
|
||||
"retry_count": 1
|
||||
},
|
||||
{
|
||||
"id": "verify_success",
|
||||
"name": "Verify Success",
|
||||
"description": "Erfolgreiche Registrierung überprüfen",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
}
|
||||
],
|
||||
"timeout": 600, # 10 Minuten Gesamttimeout
|
||||
"checkpoints": ["fill_initial_form", "email_verification", "verify_success"]
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def get_login_workflow() -> Dict[str, Any]:
|
||||
"""
|
||||
Gibt den Workflow für den Account-Login zurück.
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Workflow-Definition
|
||||
"""
|
||||
return {
|
||||
"name": "X Account Login",
|
||||
"steps": [
|
||||
{
|
||||
"id": "navigate",
|
||||
"name": "Navigate to X",
|
||||
"description": "Zur X-Startseite navigieren",
|
||||
"required": True,
|
||||
"retry_count": 3
|
||||
},
|
||||
{
|
||||
"id": "cookie_banner",
|
||||
"name": "Handle Cookie Banner",
|
||||
"description": "Cookie-Banner akzeptieren falls vorhanden",
|
||||
"required": False,
|
||||
"retry_count": 1
|
||||
},
|
||||
{
|
||||
"id": "click_login",
|
||||
"name": "Click Login",
|
||||
"description": "Anmelden Button klicken",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "enter_username",
|
||||
"name": "Enter Username/Email",
|
||||
"description": "Benutzername oder E-Mail eingeben",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "click_next",
|
||||
"name": "Click Next",
|
||||
"description": "Weiter klicken nach Benutzername",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "enter_password",
|
||||
"name": "Enter Password",
|
||||
"description": "Passwort eingeben",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "submit_login",
|
||||
"name": "Submit Login",
|
||||
"description": "Anmelden klicken",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "handle_challenges",
|
||||
"name": "Handle Challenges",
|
||||
"description": "Eventuelle Sicherheitsabfragen behandeln",
|
||||
"required": False,
|
||||
"retry_count": 3
|
||||
},
|
||||
{
|
||||
"id": "verify_success",
|
||||
"name": "Verify Success",
|
||||
"description": "Erfolgreichen Login überprüfen",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
}
|
||||
],
|
||||
"timeout": 300, # 5 Minuten Gesamttimeout
|
||||
"checkpoints": ["enter_username", "submit_login", "verify_success"]
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def get_verification_workflow() -> Dict[str, Any]:
|
||||
"""
|
||||
Gibt den Workflow für die Account-Verifizierung zurück.
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Workflow-Definition
|
||||
"""
|
||||
return {
|
||||
"name": "X Account Verification",
|
||||
"steps": [
|
||||
{
|
||||
"id": "check_verification_needed",
|
||||
"name": "Check Verification",
|
||||
"description": "Prüfen ob Verifizierung erforderlich",
|
||||
"required": True,
|
||||
"retry_count": 1
|
||||
},
|
||||
{
|
||||
"id": "select_method",
|
||||
"name": "Select Method",
|
||||
"description": "Verifizierungsmethode auswählen",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "request_code",
|
||||
"name": "Request Code",
|
||||
"description": "Verifizierungscode anfordern",
|
||||
"required": True,
|
||||
"retry_count": 3
|
||||
},
|
||||
{
|
||||
"id": "enter_code",
|
||||
"name": "Enter Code",
|
||||
"description": "Verifizierungscode eingeben",
|
||||
"required": True,
|
||||
"retry_count": 3
|
||||
},
|
||||
{
|
||||
"id": "submit_verification",
|
||||
"name": "Submit Verification",
|
||||
"description": "Verifizierung abschließen",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
},
|
||||
{
|
||||
"id": "verify_success",
|
||||
"name": "Verify Success",
|
||||
"description": "Erfolgreiche Verifizierung überprüfen",
|
||||
"required": True,
|
||||
"retry_count": 2
|
||||
}
|
||||
],
|
||||
"timeout": 300, # 5 Minuten Gesamttimeout
|
||||
"checkpoints": ["enter_code", "verify_success"]
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def get_error_recovery_strategies() -> Dict[str, List[str]]:
|
||||
"""
|
||||
Gibt Fehlerbehandlungsstrategien zurück.
|
||||
|
||||
Returns:
|
||||
Dict[str, List[str]]: Fehler und ihre Behandlungsstrategien
|
||||
"""
|
||||
return {
|
||||
"rate_limit": [
|
||||
"wait_exponential_backoff",
|
||||
"rotate_proxy",
|
||||
"change_user_agent",
|
||||
"abort_with_retry_later"
|
||||
],
|
||||
"captcha": [
|
||||
"solve_captcha_manual",
|
||||
"solve_captcha_service",
|
||||
"rotate_proxy_retry",
|
||||
"abort_with_manual_intervention"
|
||||
],
|
||||
"suspended_account": [
|
||||
"log_suspension",
|
||||
"mark_account_suspended",
|
||||
"abort_immediately"
|
||||
],
|
||||
"network_error": [
|
||||
"retry_with_backoff",
|
||||
"check_proxy_health",
|
||||
"switch_proxy",
|
||||
"retry_direct_connection"
|
||||
],
|
||||
"element_not_found": [
|
||||
"wait_longer",
|
||||
"refresh_page",
|
||||
"check_alternate_selectors",
|
||||
"take_screenshot_debug"
|
||||
]
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def get_validation_rules() -> Dict[str, Any]:
|
||||
"""
|
||||
Gibt Validierungsregeln für verschiedene Eingaben zurück.
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Validierungsregeln
|
||||
"""
|
||||
return {
|
||||
"username": {
|
||||
"min_length": 1,
|
||||
"max_length": 15,
|
||||
"allowed_chars": r"^[a-zA-Z0-9_]+$",
|
||||
"forbidden_patterns": ["twitter", "admin", "x.com"]
|
||||
},
|
||||
"password": {
|
||||
"min_length": 8,
|
||||
"max_length": 128,
|
||||
"require_uppercase": False,
|
||||
"require_lowercase": True,
|
||||
"require_number": True,
|
||||
"require_special": False
|
||||
},
|
||||
"email": {
|
||||
"pattern": r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$",
|
||||
"forbidden_domains": ["example.com", "test.com"]
|
||||
},
|
||||
"age": {
|
||||
"minimum": 13,
|
||||
"maximum": 120
|
||||
}
|
||||
}
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren