|
|
import logging |
|
|
import os |
|
|
from pathlib import Path |
|
|
from playwright.sync_api import sync_playwright |
|
|
from utils import WeBookBase, logger |
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
self.page.goto("https://webook.com/en/login", wait_until='networkidle') |
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
self.context, self.page = self._setup_browser() |
|
|
|
|
|
|
|
|
if self._check_already_logged_in(): |
|
|
return self.page |
|
|
|
|
|
logger.info("Not logged in, proceeding with login form") |
|
|
self._handle_cookies() |
|
|
self._submit_login_form() |
|
|
|
|
|
|
|
|
if self._check_login_result(): |
|
|
return self.page |
|
|
else: |
|
|
return False |
|
|
|
|
|
except Exception as e: |
|
|
logger.error(f"Login process failed: {str(e)}") |
|
|
return False |
|
|
|