Легаси-периметр impersonate: три прод-пути бэкенда остались на chrome120, а тест это закрепляет #3148

Closed
opened 2026-08-27 15:17:36 +00:00 by bot-backend · 1 comment
Collaborator

Продолжение #3034. Та правка свела impersonate-профиль к единственной константе внутри scraper_kit и подняла его до chrome146. Сторож (tests/test_impersonate_single_source.py) сканирует только пакет, и его собственная докстрока объявляет остальное «отдельным, более крупным периметром вне scope #3034», ссылаясь на #2361 F4a.

Периметр не отдельный и не спящий — он ходит в сеть каждый день, а #2361 к тому моменту уже закрыт, то есть отсылка вела в никуда.

Что осталось на chrome120 (проверено на forgejo/main)

Файл Строка Что делает
app/services/cian_session.py 164 верификация куки Циана — седьмой источник эстиматора
app/services/yandex_address_backfill.py 153 бэкфилл адресов Яндекса
app/tasks/yandex_detail_backfill.py 303 detail-бэкфилл Яндекса

Плюс tests/test_cian_session.py:488 прибивает chrome120 гвоздём — то есть закрепляет ровно тот дефект, ради устранения которого #3034 заводился: подъём профиля в kit ломал бы этот тест, а «починкой» выглядел бы возврат к устаревшему.

Почему это не косметика

Разрыв между заявленным профилем и реальным Chrome — 31 мажорная версия, и он проявляется в TLS-отпечатке (JA3/JA4), а не только в строке User-Agent. То есть сменой прокси не лечится.

Отдельно про Циан: по #2673 «оценка Циана — седьмой источник эстиматора — умерла 29 июня, куки протухли, ни одной новой строки 37 дней». Путь, которым проверяется живость этих куки, всё это время представлялся площадке браузером двухлетней давности. Не утверждаю, что причина в этом — утверждаю, что при таком отпечатке отличить «куки протухли» от «нас узнали по рукопожатию» нечем.

Acceptance

  • Три прод-пути читают DEFAULT_IMPERSONATE, а не литерал
  • Тест Циана проверяет kit-профиль, а не конкретный номер
  • Сторож литерала расширен на backend/app/ — иначе периметр вернётся молча
  • Историю замеров в комментариях не переписывать (номер профиля там — часть записи о том, чем снят замер)

Вне scope: tradein-mvp/scripts/** (разовые инструменты, в прод-путях не участвуют) и tests/fixtures/** (номер профиля — часть записи о происхождении фикстуры).

Смежное: #3034, #2673 (куки Циана), #3045 (QRATOR proof-of-work), #3143 (повторы без прокси).

Продолжение #3034. Та правка свела impersonate-профиль к единственной константе **внутри `scraper_kit`** и подняла его до `chrome146`. Сторож (`tests/test_impersonate_single_source.py`) сканирует только пакет, и его собственная докстрока объявляет остальное «отдельным, более крупным периметром вне scope #3034», ссылаясь на #2361 F4a. **Периметр не отдельный и не спящий — он ходит в сеть каждый день, а #2361 к тому моменту уже закрыт**, то есть отсылка вела в никуда. ## Что осталось на `chrome120` (проверено на `forgejo/main`) | Файл | Строка | Что делает | |---|---|---| | `app/services/cian_session.py` | 164 | **верификация куки Циана** — седьмой источник эстиматора | | `app/services/yandex_address_backfill.py` | 153 | бэкфилл адресов Яндекса | | `app/tasks/yandex_detail_backfill.py` | 303 | detail-бэкфилл Яндекса | Плюс `tests/test_cian_session.py:488` прибивает `chrome120` гвоздём — то есть **закрепляет ровно тот дефект**, ради устранения которого #3034 заводился: подъём профиля в kit ломал бы этот тест, а «починкой» выглядел бы возврат к устаревшему. ## Почему это не косметика Разрыв между заявленным профилем и реальным Chrome — 31 мажорная версия, и он проявляется в TLS-отпечатке (JA3/JA4), а не только в строке User-Agent. То есть сменой прокси не лечится. Отдельно про Циан: по #2673 «оценка Циана — седьмой источник эстиматора — умерла 29 июня, куки протухли, ни одной новой строки 37 дней». Путь, которым проверяется живость этих куки, всё это время представлялся площадке браузером двухлетней давности. Не утверждаю, что причина в этом — утверждаю, что при таком отпечатке отличить «куки протухли» от «нас узнали по рукопожатию» нечем. ## Acceptance - [ ] Три прод-пути читают `DEFAULT_IMPERSONATE`, а не литерал - [ ] Тест Циана проверяет kit-профиль, а не конкретный номер - [ ] Сторож литерала расширен на `backend/app/` — иначе периметр вернётся молча - [ ] Историю замеров в комментариях не переписывать (номер профиля там — часть записи о том, чем снят замер) Вне scope: `tradein-mvp/scripts/**` (разовые инструменты, в прод-путях не участвуют) и `tests/fixtures/**` (номер профиля — часть записи о происхождении фикстуры). Смежное: #3034, #2673 (куки Циана), #3045 (QRATOR proof-of-work), #3143 (повторы без прокси).
bot-backend added the
bug
priority/p1
scope/backend
scrapers
tradein
labels 2026-08-27 15:17:47 +00:00
Author
Collaborator

Смержено (PR #3149) и проверено на проде — закрываю

Деплой прошёл, проверял не по диффу, а интроспекцией модулей в живом контейнере tradein-backend:

DEFAULT_IMPERSONATE: chrome146
cian_session:            литерал chrome120 = False | читает константу = True
yandex_address_backfill: литерал chrome120 = False | читает константу = True
yandex_detail_backfill:  литерал chrome120 = False | читает константу = True

CI зелёный на всех восьми проверках; первый прогон падал на ruff E501 — три докстроки удлинились от замены литерала на имя константы, абзацы перевёрстаны целиком (рваный перенос читался бы как опечатка).

Что теперь сторожит регрессию

Сторож литерала расширен со scraper_kit на backend/app/. Проверено, что он умеет краснеть, а не только зеленеть: на подсаженном литерале падает. Исключения (tests/fixtures/**, tradein-mvp/scripts/**) теперь описаны в докстроке явно — до этого «периметр вне scope» жил как ссылка на #2361, который был закрыт, то есть исключение пережило свой повод.

Чего эта правка НЕ проверяет

Что Циан снова пускает. Куки протухли 30 июня (#2700), и без валидных куки путь verify_session до площадки не доходит — отличить «отпечаток теперь правдоподобный» от «всё ещё узнают» можно будет только после их загрузки. Правка убирает одну из двух возможных причин отказа, а не доказывает, что причина была в ней.

## Смержено (PR #3149) и проверено на проде — закрываю Деплой прошёл, проверял не по диффу, а интроспекцией модулей в живом контейнере `tradein-backend`: ``` DEFAULT_IMPERSONATE: chrome146 cian_session: литерал chrome120 = False | читает константу = True yandex_address_backfill: литерал chrome120 = False | читает константу = True yandex_detail_backfill: литерал chrome120 = False | читает константу = True ``` CI зелёный на всех восьми проверках; первый прогон падал на `ruff E501` — три докстроки удлинились от замены литерала на имя константы, абзацы перевёрстаны целиком (рваный перенос читался бы как опечатка). ### Что теперь сторожит регрессию Сторож литерала расширен со `scraper_kit` на `backend/app/`. Проверено, что он умеет краснеть, а не только зеленеть: на подсаженном литерале падает. Исключения (`tests/fixtures/**`, `tradein-mvp/scripts/**`) теперь описаны в докстроке явно — до этого «периметр вне scope» жил как ссылка на #2361, который был закрыт, то есть исключение пережило свой повод. ### Чего эта правка НЕ проверяет Что Циан снова пускает. Куки протухли 30 июня (#2700), и без валидных куки путь `verify_session` до площадки не доходит — отличить «отпечаток теперь правдоподобный» от «всё ещё узнают» можно будет только после их загрузки. Правка убирает одну из двух возможных причин отказа, а не доказывает, что причина была в ней.
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#3148
No description provided.