fix(tradein/domclick): распознанный QRATOR-блок свипа — ban_kind='platform', не 'unknown' (#2687) #2832
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2832
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2687-domclick-ban-kind-platform"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что чинит (часть разбора #2687 / #2657)
Ветка
if counters.blocked:вrun_domclick_city_sweepвходится только когда скрейпер поднялDomClickBlockedError(площадка отдала QRATOR block-страницу,counters.blocked==1). Это ровно определениеBAN_KIND_PLATFORM(«площадка нас заблокировала»). Свип звалmark_bannedбезban_kind→ дефолт'unknown'(#2764), хотя диагноз здесь установлен, а не «не установлен».Прод 2026-08-12:
Мониторинг #2657 разводит «тракт/прокси» (
infra) и «площадка» (platform) именно поban_kind. Под'unknown'это различение слепо — тогда как здесь площадка себя показала (QRATOR), и этоplatform, симметрично тому, какAvitoBlockedError→platformвban_kind_of_exception.Тест
test_2687_domclick_ban_kind.py— свип сblocked=Trueуходит вmark_bannedсban_kind='platform'. Red на старом коде: без правкиban_kindне передаётся →None != 'platform'. Не удалось прогнать локально (нет venv с деп-деревом app/scraper_kit; прод read-only) — гейт прогонит CI; харнесс — клон рабочего_driveизtest_2670.Чего PR НЕ трогает
Вопрос #2687 про полный обход Авито — это разбор, не правка: полный обход ходит через пул (не мимо), а 0-seen у него — платформенный SERP-firewall (#2827), а не дефект проводки. Детали и опровергнутые предпосылки — в комментарии к #2687.
Связано: #2687, #2657, #2764, #2686.
Проверено перед мержем — числа актуальны и даже занижены
На проде за 14 суток
ban_kind='unknown'у десяти прогонов Домклика, а не у трёх:domclick_detail_backfilldomclick_city_sweepavito_detail_backfillКонтраст с Авито показателен: там механизм работает и диагноз доезжает. То есть это не «нигде не сделано», а «сделано для одного источника из двух».
Остаток, который этот PR не покрывает — 7 из 10
Правка входит в ветку
if counters.blocked:внутриrun_domclick_city_sweep— это 3 бана. Оставшиеся 7 приходят отdomclick_detail_backfill, и путь у него другой: сама задачаmark_bannedне зовёт, она считаетconsecutive_blocksи обрывается по порогу. Отображениеban_kind_of_exceptionперечисляет только исключения Авито (AvitoSidecarUnavailableError,NoProxyAvailableError,AvitoBlockedError),DomClickBlockedErrorв нём отсутствует, и всё прочее уходит вunknown.Не блокирую этим мерж: PR заявляет свип и делает ровно свип, с красным прогоном. Расширять область правки задним числом — плохой размен.
Но остаток стоит взять следом, и он больше исходного: 7 банов против 3, причём именно у обогащения, где блок распознан генуинно —
parse_detail_htmlловит маркеры QRATOR при HTTP 200 и зовётreport_ban(providers/domclick/detail.py:553). Диагноз там установлен ровно так же, как в свипе, и так же не доезжает доscrape_runs.Что важнее классификации
Пока сбор Домклика мёртв целиком, и
ban_kindэтого не чинит — только делает различимым:Последний полноценный обход — 18.07, 5937 объявлений за сутки. Дальше ручеёк: 307 (31.07), 313 (10.08), 59 (12.08). Второго августа деактиватор снял 6131 объявление разом — не потому, что они исчезли с площадки, а потому что мы перестали их видеть и сработал порог свежести.
Сегодня активными числятся 752 из 6779 (11.1%). Это и есть настоящий размер задачи; классификация бана — первый шаг к тому, чтобы отказ было видно, а не последний.