From 0b2f4e902157738816f9fb2cd2b0ee415bad578c Mon Sep 17 00:00:00 2001 From: Yuriy Yuriev Date: Mon, 18 May 2026 22:36:13 +0700 Subject: [PATCH] fix ip --- services/browser_service.py | 29 ++++++++++++++++------------- test_simple.py | 2 +- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/services/browser_service.py b/services/browser_service.py index 564bec3..452f6cf 100644 --- a/services/browser_service.py +++ b/services/browser_service.py @@ -20,18 +20,22 @@ from services.socks5_to_http_proxy import Socks5ProxyPool logger = logging.getLogger(__name__) -def _get_proxy_locale_by_ip(ip: str) -> str: - """Возвращает locale без script-тега для реального IP прокси (ru-Cyrl-RU → ru-RU).""" +def _get_proxy_geo(ip: str) -> dict: + """Возвращает geoip-данные для реального IP прокси в виде kwargs для AsyncCamoufox.""" try: from camoufox.utils import get_geolocation geo = get_geolocation(ip) lang = geo.locale.language region = geo.locale.region - if lang and region: - return f"{lang}-{region}" + locale = f"{lang}-{region}" if lang and region else "en-US" + result = {"locale": locale} + if geo.timezone: + result["timezone"] = geo.timezone + if geo.longitude is not None and geo.latitude is not None: + result["geolocation"] = {"longitude": geo.longitude, "latitude": geo.latitude} + return result except Exception: - pass - return "en-US" + return {"locale": "en-US"} @dataclass @@ -94,19 +98,18 @@ class BrowserService: logger.info("Direct connection") if proxy_config: - # Для SOCKS5 camoufox видит 127.0.0.1 вместо реального IP — - # делаем geoip lookup сами по реальному IP и передаём locale явно - locale = _get_proxy_locale_by_ip(real_proxy_ip) if real_proxy_ip else None + # Camoufox при SOCKS5 видит 127.0.0.1 вместо реального IP прокси — + # geoip lookup делаем сами и передаём timezone/locale/geolocation явно, + # это полный эквивалент geoip=True но без внутреннего constraint'а camoufox + geo_kwargs = _get_proxy_geo(real_proxy_ip) if real_proxy_ip else {"locale": "en-US"} kwargs = dict( headless=True, geoip=True, humanize=True, exclude_addons=[DefaultAddons.UBO], proxy=proxy_config, + **geo_kwargs, ) - if locale: - kwargs["locale"] = locale - try: async with AsyncCamoufox(**kwargs) as browser: result = await self._browse_page( @@ -115,9 +118,9 @@ class BrowserService: reading_time ) except ValueError: - # Финальный fallback — locale en-US гарантированно есть в базе logger.warning("geoip fingerprint failed, retrying with en-US locale") kwargs["locale"] = "en-US" + kwargs.pop("geolocation", None) async with AsyncCamoufox(**kwargs) as browser: result = await self._browse_page( browser, url, diff --git a/test_simple.py b/test_simple.py index c0376d1..648243e 100644 --- a/test_simple.py +++ b/test_simple.py @@ -136,7 +136,7 @@ async def simple_test(): # Выполняем посещение print(" 🔄 Выполняем посещение...") - result = await browser_service.visit_page_from_twitch(url, "jentteno", reading_time) + result = await browser_service.visit_page(url, reading_time) elapsed = time.time() - start_time