tradein/domclick: «система защиты от протечек» в описании квартиры читалась свипом как блок QRATOR #3272

Closed
opened 2026-08-30 09:03:32 +00:00 by lekss361 · 0 comments
Owner

Найдено первым сквозным прогоном свипа после #3266. Правка — в PR #3268 (ветка и коммит по недосмотру ссылаются на номер 3267, который занят другим, уже смерженным PR по Авито; правильный номер — этот).

Симптом

Прогон 5363 (30.08): семь запросов подряд HTTP 200, страницы офферов по 103-128 КБ, 69 лотов собрано, ошибок ноль — и на восьмом свип объявил блок QRATOR, оборвал все комнатные корзины и забанил живой узел пула на 6 часов.

Ответ, на котором это случилось, был нормальным: HTTP 200, 107 183 байта, двадцать валидных офферов. Совпал маркер «система защиты» — внутри описания квартиры:

🔹 Двери скрытого монтажа с магнитными стопперами
🔹 Система защиты от протечек
🔹 Встроенная мебель и качественная техника

Продавец написал про защиту от протечек.

Причина

serp.py::_extract_json искал DOMCLICK_BLOCK_MARKERS подстрокой по всему телу и делал это до разбора JSON — то есть и по пользовательскому тексту. Кроме «система защиты» в списке есть captcha, qrator, access denied: любой может встретиться в описании, названии агентства или ссылке.

detail.py этой болезнью не страдал: там маркеры смотрят только когда __SSR_STATE__ не найден, то есть исключительно на неуспешных страницах. Свип был единственным местом с обратным порядком.

Правка (#3268)

Порядок перевёрнут: сначала разбор JSON, маркеры — только если разбор не удался. Разобранный словарь блок-страницей быть не может, QRATOR отдаёт HTML.

Заодно мусор без маркеров стал ValueError, а не блоком: за неразобранный ответ неизвестной природы узел банить нельзя, цена ошибки — шесть часов простоя узла.

Найдено первым сквозным прогоном свипа после #3266. Правка — в PR #3268 (ветка и коммит по недосмотру ссылаются на номер 3267, который занят другим, уже смерженным PR по Авито; правильный номер — этот). ## Симптом Прогон 5363 (30.08): семь запросов подряд `HTTP 200`, страницы офферов по 103-128 КБ, **69 лотов собрано, ошибок ноль** — и на восьмом свип объявил блок QRATOR, оборвал все комнатные корзины и забанил живой узел пула на 6 часов. Ответ, на котором это случилось, был нормальным: `HTTP 200`, 107 183 байта, двадцать валидных офферов. Совпал маркер `«система защиты»` — внутри описания квартиры: ``` 🔹 Двери скрытого монтажа с магнитными стопперами 🔹 Система защиты от протечек 🔹 Встроенная мебель и качественная техника ``` Продавец написал про защиту от протечек. ## Причина `serp.py::_extract_json` искал `DOMCLICK_BLOCK_MARKERS` подстрокой по всему телу и делал это **до** разбора JSON — то есть и по пользовательскому тексту. Кроме «система защиты» в списке есть `captcha`, `qrator`, `access denied`: любой может встретиться в описании, названии агентства или ссылке. `detail.py` этой болезнью не страдал: там маркеры смотрят только когда `__SSR_STATE__` не найден, то есть исключительно на неуспешных страницах. Свип был единственным местом с обратным порядком. ## Правка (#3268) Порядок перевёрнут: сначала разбор JSON, маркеры — только если разбор не удался. Разобранный словарь блок-страницей быть не может, QRATOR отдаёт HTML. Заодно мусор без маркеров стал `ValueError`, а не блоком: за неразобранный ответ неизвестной природы узел банить нельзя, цена ошибки — шесть часов простоя узла.
Sign in to join this conversation.
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#3272
No description provided.