feat : logger class for better logging

This commit is contained in:
martin legrand 2025-04-05 12:12:38 +02:00
parent a5c5061a2f
commit a09b6bf8aa
2 changed files with 61 additions and 12 deletions

View File

@ -18,19 +18,18 @@ import random
import os
import shutil
import markdownify
import logging
import sys
import re
if __name__ == "__main__":
from utility import pretty_print, animate_thinking
from logger import Logger
else:
from sources.utility import pretty_print, animate_thinking
logging.basicConfig(filename='browser.log', level=logging.ERROR,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
from sources.logger import Logger
def get_chrome_path() -> str:
"""Get the path to the Chrome executable."""
if sys.platform.startswith("win"):
paths = [
"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
@ -111,14 +110,11 @@ class Browser:
"""Initialize the browser with optional AntiCaptcha installation."""
self.js_scripts_folder = "./sources/web_scripts/" if not __name__ == "__main__" else "./web_scripts/"
self.anticaptcha = "https://chrome.google.com/webstore/detail/nopecha-captcha-solver/dknlfmjaanfblgfdfebhijalfmhmjjjo/related"
self.logger = Logger("browser.log")
try:
self.driver = driver
self.wait = WebDriverWait(self.driver, 10)
self.logger = logging.getLogger(__name__)
self.logger.info("Browser initialized successfully")
except Exception as e:
logging.basicConfig(filename='browser.log', level=logging.ERROR,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
raise Exception(f"Failed to initialize browser: {str(e)}")
self.driver.get("https://www.google.com")
if anticaptcha_manual_install:
@ -142,7 +138,7 @@ class Browser:
message="stuck on 'checking browser' or verification screen"
)
self.apply_web_safety()
self.logger.info(f"Navigated to: {url}")
self.logger.log(f"Navigated to: {url}")
return True
except TimeoutException as e:
self.logger.error(f"Timeout waiting for {url} to load: {str(e)}")
@ -167,7 +163,7 @@ class Browser:
return (word_count >= 5 and (has_punctuation or is_long_enough))
def get_text(self) -> str | None:
"""Get page text and convert it to README (Markdown) format."""
"""Get page text."""
try:
soup = BeautifulSoup(self.driver.page_source, 'html.parser')
@ -450,8 +446,6 @@ class Browser:
input_elements = self.driver.execute_script(script)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
driver = create_driver()
browser = Browser(driver, anticaptcha_manual_install=True)
time.sleep(10)

55
sources/logger.py Normal file
View File

@ -0,0 +1,55 @@
import os, sys
from typing import List, Tuple, Type, Dict, Tuple
import datetime
import logging
class Logger:
def __init__(self, log_filename):
self.folder = '.logs'
self.create_folder(self.folder)
self.log_path = os.path.join(self.folder, log_filename)
self.enabled = True
self.logger = None
if self.enabled:
self.create_logging(log_filename)
def create_logging(self, log_filename):
self.logger = logging.getLogger(log_filename)
self.logger.setLevel(logging.DEBUG)
if not self.logger.handlers:
file_handler = logging.FileHandler(self.log_path)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
self.logger.addHandler(file_handler)
def create_folder(self, path):
"""Create log dir"""
try:
if not os.path.exists(path):
os.makedirs(path, exist_ok=True)
return True
except Exception as e:
self.enabled = False
return False
def log(self, message, level=logging.INFO):
if self.enabled:
self.logger.log(level, message)
def info(self, message):
self.log(message)
def error(self, message):
self.log(message, level=logging.ERROR)
def warning(self, message):
self.log(message, level=logging.WARN)
if __name__ == "__main__":
lg = Logger("test.log")
lg.log("hello")
lg2 = Logger("toto.log")
lg2.log("yo")