improve batch sync add postgres upsert fix sync locking improve listing sync speed up scraper clean up project prepare for github update docker setup
47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
import random
|
|
import time
|
|
|
|
from playwright.sync_api import Locator, Page
|
|
|
|
from ..core.config import Settings
|
|
|
|
|
|
class HumanPacer:
|
|
# Случайные паузы между действиями.
|
|
|
|
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"] + box["width"] * random.uniform(0.2, 0.8)
|
|
y = box["y"] + box["height"] * random.uniform(0.2, 0.8)
|
|
page.mouse.move(x, y, steps=random.randint(8, 18))
|