This commit is contained in:
Yuriy Yuriev
2026-05-18 22:36:13 +07:00
parent 6fe94f7ed9
commit 0b2f4e9021
2 changed files with 17 additions and 14 deletions
+16 -13
View File
@@ -20,18 +20,22 @@ from services.socks5_to_http_proxy import Socks5ProxyPool
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def _get_proxy_locale_by_ip(ip: str) -> str: def _get_proxy_geo(ip: str) -> dict:
"""Возвращает locale без script-тега для реального IP прокси (ru-Cyrl-RU → ru-RU).""" """Возвращает geoip-данные для реального IP прокси в виде kwargs для AsyncCamoufox."""
try: try:
from camoufox.utils import get_geolocation from camoufox.utils import get_geolocation
geo = get_geolocation(ip) geo = get_geolocation(ip)
lang = geo.locale.language lang = geo.locale.language
region = geo.locale.region region = geo.locale.region
if lang and region: locale = f"{lang}-{region}" if lang and region else "en-US"
return f"{lang}-{region}" 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: except Exception:
pass return {"locale": "en-US"}
return "en-US"
@dataclass @dataclass
@@ -94,19 +98,18 @@ class BrowserService:
logger.info("Direct connection") logger.info("Direct connection")
if proxy_config: if proxy_config:
# Для SOCKS5 camoufox видит 127.0.0.1 вместо реального IP — # Camoufox при SOCKS5 видит 127.0.0.1 вместо реального IP прокси
# делаем geoip lookup сами по реальному IP и передаём locale явно # geoip lookup делаем сами и передаём timezone/locale/geolocation явно,
locale = _get_proxy_locale_by_ip(real_proxy_ip) if real_proxy_ip else None # это полный эквивалент geoip=True но без внутреннего constraint'а camoufox
geo_kwargs = _get_proxy_geo(real_proxy_ip) if real_proxy_ip else {"locale": "en-US"}
kwargs = dict( kwargs = dict(
headless=True, headless=True,
geoip=True, geoip=True,
humanize=True, humanize=True,
exclude_addons=[DefaultAddons.UBO], exclude_addons=[DefaultAddons.UBO],
proxy=proxy_config, proxy=proxy_config,
**geo_kwargs,
) )
if locale:
kwargs["locale"] = locale
try: try:
async with AsyncCamoufox(**kwargs) as browser: async with AsyncCamoufox(**kwargs) as browser:
result = await self._browse_page( result = await self._browse_page(
@@ -115,9 +118,9 @@ class BrowserService:
reading_time reading_time
) )
except ValueError: except ValueError:
# Финальный fallback — locale en-US гарантированно есть в базе
logger.warning("geoip fingerprint failed, retrying with en-US locale") logger.warning("geoip fingerprint failed, retrying with en-US locale")
kwargs["locale"] = "en-US" kwargs["locale"] = "en-US"
kwargs.pop("geolocation", None)
async with AsyncCamoufox(**kwargs) as browser: async with AsyncCamoufox(**kwargs) as browser:
result = await self._browse_page( result = await self._browse_page(
browser, url, browser, url,
+1 -1
View File
@@ -136,7 +136,7 @@ async def simple_test():
# Выполняем посещение # Выполняем посещение
print(" 🔄 Выполняем посещение...") 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 elapsed = time.time() - start_time