fix(tradein/browser): сайдкар безусловно резал картинки, а camoufox предупреждал, что за это ловят WAF #3186

Merged
bot-backend merged 1 commit from fix/3185-block-images into main 2026-08-28 17:51:36 +00:00
Collaborator

Суть

_launch_browser ставил block_images: True для всех провайдеров, и в комментарии стояла только выгода — «рендер быстрее». Цена не стояла, хотя camoufox сообщает о ней при каждом запуске:

LeakWarning: Blocking image requests has been reported to cause
detection issues on major WAFs.

За три часа прода — 44 таких предупреждения. Авито стоит за QRATOR, доля заглушек в detail-сборе ~32% (посчитано по размерам ответов самого сайдкара в окне прогона 5200: 29 заглушек против 63 живых карточек).

Что изменено

  • _resolve_block_images(provider) по образцу соседней _resolve_min_interval: per-provider env → global env → код-дефолт.
  • Новые env: BROWSER_BLOCK_IMAGES (глобально), BROWSER_BLOCK_IMAGES_{PROVIDER} (точечно).
  • Дефолт для avito — не блокировать. Для cian/yandex/generic дефолт прежний, True.
  • Комментарий у опции переписан: теперь видна и цена, не только выгода.
  • Итоговая карта логируется на старте, симметрично page-intervals.

Чего изменение НЕ делает

Не меняет поведение трёх остальных скраперов. Их долю блоков никто не мерил, и менять им настройку заодно значило бы вслепую тронуть три сбора ради одной гипотезы. Проверено ревью по коду: фолбэк True и в словаре дефолтов, и в .get() на месте вызова.

Не является доказанной причиной блоков. Мой прямой прогон 16 карточек через тот же сайдкар с блокировкой картинок дал 15/16 — то есть она точно не единственный фактор. Это единственная названная, документированная причина, лежащая в нашем собственном конфиге; проверяется замером, а не рассуждением.

Тесты

6 новых, покрывают все четыре слоя приоритета (код-дефолт / global env / per-provider env / нераспознанное значение) симметрично для avito и не-avito. Весь файл сайдкара — 35/35.

Test plan

  • pytest browser/test_server.py — 35/35
  • ruff — без новых замечаний
  • CI зелёный
  • После деплоя: LeakWarning для avito пропал из лога сайдкара
  • A/B на выборке ≥40 карточек на группу — блоки идут пачками (#3184), на малой выборке разница неразличима

Ops-хвост (не в этом PR)

BROWSER_BLOCK_RESOURCES в compose нет — она в .env.runtime на сервере. Мёртвая (в _RETIRED_ENV, кодом не читается), убирать руками на хосте.

Closes #3185

## Суть `_launch_browser` ставил `block_images: True` для всех провайдеров, и в комментарии стояла только выгода — «рендер быстрее». Цена не стояла, хотя camoufox сообщает о ней при каждом запуске: ``` LeakWarning: Blocking image requests has been reported to cause detection issues on major WAFs. ``` За три часа прода — **44 таких предупреждения**. Авито стоит за QRATOR, доля заглушек в detail-сборе ~32% (посчитано по размерам ответов самого сайдкара в окне прогона 5200: 29 заглушек против 63 живых карточек). ## Что изменено - `_resolve_block_images(provider)` по образцу соседней `_resolve_min_interval`: per-provider env → global env → код-дефолт. - Новые env: `BROWSER_BLOCK_IMAGES` (глобально), `BROWSER_BLOCK_IMAGES_{PROVIDER}` (точечно). - Дефолт для **avito — не блокировать**. Для `cian`/`yandex`/`generic` дефолт прежний, `True`. - Комментарий у опции переписан: теперь видна и цена, не только выгода. - Итоговая карта логируется на старте, симметрично `page-intervals`. ## Чего изменение НЕ делает **Не меняет поведение трёх остальных скраперов.** Их долю блоков никто не мерил, и менять им настройку заодно значило бы вслепую тронуть три сбора ради одной гипотезы. Проверено ревью по коду: фолбэк `True` и в словаре дефолтов, и в `.get()` на месте вызова. **Не является доказанной причиной блоков.** Мой прямой прогон 16 карточек через тот же сайдкар с блокировкой картинок дал 15/16 — то есть она точно не единственный фактор. Это единственная названная, документированная причина, лежащая в нашем собственном конфиге; проверяется замером, а не рассуждением. ## Тесты 6 новых, покрывают все четыре слоя приоритета (код-дефолт / global env / per-provider env / нераспознанное значение) симметрично для avito и не-avito. Весь файл сайдкара — 35/35. ## Test plan - [x] `pytest browser/test_server.py` — 35/35 - [x] `ruff` — без новых замечаний - [ ] CI зелёный - [ ] После деплоя: `LeakWarning` для avito пропал из лога сайдкара - [ ] A/B на выборке ≥40 карточек на группу — блоки идут пачками (#3184), на малой выборке разница неразличима ## Ops-хвост (не в этом PR) `BROWSER_BLOCK_RESOURCES` в compose нет — она в `.env.runtime` на сервере. Мёртвая (в `_RETIRED_ENV`, кодом не читается), убирать руками на хосте. Closes #3185
bot-backend added 1 commit 2026-08-28 17:50:10 +00:00
fix(tradein/browser): сайдкар безусловно резал картинки, а camoufox предупреждал, что за это ловят WAF
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
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 Trade-In / browser-tests (pull_request) Successful in 53s
f6f494c17b
_launch_browser ставил block_images: True для всех провайдеров, и в
комментарии стояла только выгода — «рендер быстрее». Цена в комментарии
не стояла, хотя camoufox пишет о ней в каждый запуск:

  LeakWarning: Blocking image requests has been reported to cause
  detection issues on major WAFs.

За три часа прода — 44 таких предупреждения. Авито стоит за QRATOR,
доля заглушек в detail-сборе ~32%.

Теперь block_images разрешается через _resolve_block_images по образцу
соседней _resolve_min_interval: per-provider env -> global env ->
код-дефолт. Для avito дефолт — не блокировать. Для cian/yandex/generic
дефолт остаётся прежним: их долю блоков никто не мерил, и менять им
поведение заодно значило бы поменять три скрапера вслепую.

Это не доказанная причина блоков, а единственная названная и
документированная — своим же инструментом, в своём же конфиге. Проверять
её надо замером на выборке от 40 карточек: блоки идут пачками (#3184),
на малых выборках разница неразличима.

Итоговая карта пишется в лог на старте, симметрично page-intervals —
иначе значение видно только в коде.

Refs #3185
bot-backend merged commit 1ee3c533ed into main 2026-08-28 17:51:36 +00:00
bot-backend deleted branch fix/3185-block-images 2026-08-28 17:51:37 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3186
No description provided.