import logging import os from pathlib import Path from playwright.sync_api import sync_playwright from utils import WeBookBase, logger # Configure logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('logs/webook_login.log'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) class WeBookLogin(WeBookBase): def __init__(self, email, password, profile_dir=None): super().__init__(profile_dir) self.email = email self.password = password def _submit_login_form(self): try: self.page.locator('[data-testid="auth_login_email_input"]').fill(self.email) self.page.locator('#password').fill(self.password) login_button = self.page.locator('[data-testid="auth_login_submit_button"]') login_button.click() logger.info("Login form submitted") loading_spinner = self.page.locator('[data-testid="circle-spinner"]') if loading_spinner.is_visible(): logger.info("Waiting for login to process...") loading_spinner.wait_for(state="hidden") except Exception as e: logger.error(f"Login form submission failed: {str(e)}") raise def _check_login_result(self): try: error_message = self.page.locator('p.text-error') if error_message.is_visible(): error_text = error_message.inner_text() logger.error(f"Login failed: {error_text}") self.page.screenshot(path="login_failed.png") return False self.page.wait_for_url("https://webook.com/en", timeout=10000) logger.info("Successfully redirected to dashboard") return True except Exception as e: logger.error(f"Login verification failed: {str(e)}") return False def _check_already_logged_in(self): try: # Navigate to login page self.page.goto("https://webook.com/en/login", wait_until='networkidle') # Check if we're redirected to dashboard current_url = self.page.url if current_url == "https://webook.com/en": logger.info("Already logged in - redirected to dashboard") return True return False except Exception as e: logger.error(f"Error checking login status: {str(e)}") return False def login(self): try: # Setup browser and get the page/context, even if using an existing one self.context, self.page = self._setup_browser() # First check if already logged in if self._check_already_logged_in(): return self.page # Return the page if already logged in logger.info("Not logged in, proceeding with login form") self._handle_cookies() self._submit_login_form() # Check login result and return page or False if self._check_login_result(): return self.page # Return the page if login was successful else: return False # Return False if login failed except Exception as e: logger.error(f"Login process failed: {str(e)}") return False