import random import time from playwright.sync_api import Locator, Page from ..core.config import Settings class HumanPacer: """Random паузы между действиями.""" def __init__(self, settings: Settings) -> None: self.settings = settings def pause(self, min_s: float, max_s: float) -> None: if self.settings.pace.enabled: time.sleep(random.uniform(min_s, max_s)) def after_listing_open(self) -> None: self.pause(self.settings.pace.after_listing_open_min_s, self.settings.pace.after_listing_open_max_s) def after_filter_action(self) -> None: self.pause(self.settings.pace.after_filter_action_min_s, self.settings.pace.after_filter_action_max_s) def before_vehicle_open(self) -> None: self.pause(self.settings.pace.before_vehicle_open_min_s, self.settings.pace.before_vehicle_open_max_s) def after_vehicle_open(self) -> None: self.pause(self.settings.pace.after_vehicle_open_min_s, self.settings.pace.after_vehicle_open_max_s) def between_vehicles(self) -> None: self.pause(self.settings.pace.between_vehicles_min_s, self.settings.pace.between_vehicles_max_s) def after_page_change(self) -> None: self.pause(self.settings.pace.after_page_change_min_s, self.settings.pace.after_page_change_max_s) def move_mouse_to(self, page: Page, locator: Locator) -> None: try: box = locator.bounding_box() except Exception: box = None if not box: return x = box["x"] + min(box["width"] * 0.6, max(5, box["width"] * random.uniform(0.2, 0.8))) y = box["y"] + min(box["height"] * 0.6, max(5, box["height"] * random.uniform(0.2, 0.8))) page.mouse.move(x, y, steps=random.randint(8, 18))