diff --git a/tradein-mvp/backend/app/core/config.py b/tradein-mvp/backend/app/core/config.py index 42067d74..2c035f89 100644 --- a/tradein-mvp/backend/app/core/config.py +++ b/tradein-mvp/backend/app/core/config.py @@ -964,6 +964,15 @@ class Settings(BaseSettings): # True (дефолт) = curl_cffi через settings.scraper_proxy_url (backconnect mproxy). # False = старое browser-поведение (BrowserFetcher/auv, как scraper_fetch_mode). # ENV: AVITO_DETAIL_BACKFILL_USE_CURL. + # + # ⚠️ Обоснование выше УСТАРЕЛО для Авито (замер 2026-08-21). Авито за QRATOR + # отдаёт JS proof-of-work челлендж, который curl_cffi не решает: прогоны + # 4348/4394/4508 — 3-4 обогащённых из 46-53 попыток (~6%) против ~74% на + # браузерном пути. Опасение «browser превышает cap прокси-аккаунта auv» снято: + # браузер сериализован BROWSER_CONCURRENCY=1 и ходит через тот же backconnect. + # Прод переведён на браузер через docker-compose.prod.yml (environment + # перекрывает env_file). Дефолт оставлен True, чтобы не менять поведение + # других окружений вслепую. avito_detail_backfill_use_curl: bool = Field( default=True, validation_alias="AVITO_DETAIL_BACKFILL_USE_CURL" ) diff --git a/tradein-mvp/docker-compose.prod.yml b/tradein-mvp/docker-compose.prod.yml index 2f9914bd..a2fb8211 100644 --- a/tradein-mvp/docker-compose.prod.yml +++ b/tradein-mvp/docker-compose.prod.yml @@ -336,6 +336,18 @@ services: USE_KIT_SCHEDULER: "true" USE_PROXY_POOL_CURL: "true" USE_PROXY_POOL_BROWSER: "true" + # Транспорт detail_backfill: браузер, НЕ curl (замер 2026-08-21). + # Авито за QRATOR отдаёт JavaScript proof-of-work челлендж (startPow → + # кука pow_solved → self-reload). curl_cffi его не решает в принципе: + # прогоны 4348/4394/4508 дали 3-4 обогащённых из 46-53 попыток (~6%). + # Браузерный путь (camoufox + ожидание челленджа, #3045/#3046) на том же + # проде даёт ~74% (17/23 в свипе, 2/3 в точечной проверке). + # Исходное обоснование use_curl=True (browser открывает десятки коннектов + # и превышает cap прокси-аккаунта auv) больше не действует: браузер + # сериализован BROWSER_CONCURRENCY=1 и ходит через тот же backconnect + # SCRAPER_PROXY_URL, что и curl-путь. + # environment: перекрывает env_file — значение из runtime-env игнорируется. + AVITO_DETAIL_BACKFILL_USE_CURL: "false" depends_on: postgres: condition: service_healthy