fix(tradein/avito): detail_backfill ходил curl'ом, который не решает PoW-челлендж
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m32s

Замер на проде 2026-08-21: Авито за QRATOR отдаёт JavaScript proof-of-work
челлендж (startPow → кука pow_solved → self-reload через window.location).
curl_cffi не исполняет JS и пройти его не может в принципе.

Что это давало в цифрах (counters прогонов avito_detail_backfill):

    run 4508: enriched 3  / attempted 46
    run 4394: enriched 2  / attempted 47
    run 4348: enriched 4  / attempted 53

~6% успеха. Браузерный путь на том же проде — ~74% (17/23 в инлайн-обогащении
свипа, 2/3 в точечной проверке после #3048). То есть задание работало почти
вхолостую, а поля дома, которые чинил #3048, до карточек просто не доходили.

Исходное обоснование AVITO_DETAIL_BACKFILL_USE_CURL=true (browser открывает
десятки коннектов и превышает cap прокси-аккаунта auv) больше не действует:
браузер сериализован BROWSER_CONCURRENCY=1 и ходит через тот же backconnect
SCRAPER_PROXY_URL, что и curl-путь.

Переключение сделано в docker-compose.prod.yml (environment перекрывает
env_file), а не правкой рантайм-env на хосте — чтобы изменение осталось в
репозитории и пережило deploy без дрейфа конфигурации. Дефолт в config.py
оставлен True: другие окружения не трогаем вслепую, но устаревшее обоснование
там помечено.
This commit is contained in:
bot-backend 2026-08-22 00:11:59 +03:00
parent a67ed2bd07
commit b61123d7a6
2 changed files with 21 additions and 0 deletions

View file

@ -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"
)

View file

@ -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