fix(tradein/cian): Циан переименовал MFE карточки ЖК — читать оба имени (#2767) #2804

Merged
bot-backend merged 1 commit from fix/2767-fichering-mfe into main 2026-08-09 18:41:03 +00:00
Collaborator

Гипотеза про разметку всё-таки верна — но не для тех страниц

После #2798/#2801 обогащение поехало (15 из 25 против 0 из 25 девять суток), но часть страниц продолжала не разбираться, приходя целиком: 682-886 КБ, ни капчи, ни WAF. Живая проба 2026-08-09 показала, что на них лежит:

zhk-kosmos-ekb-i.cian.ru: len=810478 state=no
  MFE в _cianConfig: [..., 'newbuilding-card-desktop-fichering-frontend']

Старого имени newbuilding-card-desktop-frontend на такой странице нет вовсе. Циан раскатывает новый фронт карточки ЖК на часть новостроек. Состояние лежит под тем же ключом initialState и той же формы:

newbuilding-card-desktop-fichering-frontend:
  newbuilding.id=3235089 name='Космос'
  rv.data keys=['lastUpdatedText', 'priceDynamics', 'pricesFiltersData', 'promo']

Это и есть ответ про houses_price_dynamics

Последняя строка там — 2026-07-26. Складывались две причины:

  1. ЖК, переехавшие на новый фронт: график цен есть, но старое имя MFE его не находило;
  2. ЖК, оставшиеся на старом фронте: у многих realtyValuation.data попросту {} — Циан считает динамику раз в месяц и не для всех (проверено: у zhk-svetlyy-ekb-i.cian.ru данные есть и разбираются ТЕКУЩИМ _extract_chart, у zhk-pihtovyy — пусто).

Вместе это давало ноль строк при внешне успешном обогащении.

Вторая правка: снята голая подстрока «captcha»

Любая здоровая карточка ЖК грузит скрипт SmartCaptcha, поэтому подстрока есть всегда. На проде это выглядело так:

18:22:04 BrowserFetcher: lease id=11 (cian) BANNED — cian newbuilding: captcha
18:22:04 zhk-utes-ekb-i.cian.ru: initialState extraction failed — html_len=710998 antibot_markers=captcha

Здоровый узел, целая страница, никакой капчи — бан по слову. Стена капчи опознаётся своим заголовком «Вы не робот?»: он в списке и на всех 15-килобайтных стенах срабатывал вместе с «captcha», так что детект не теряется, а ложный сигнал уходит.

Строка отказа теперь называет, в каких именно MFE искали, — чтобы следующий такой переезд читался с первой строки лога, а не с третьей итерации.

Test plan

  • pytest -k "newbuilding or cian" — 250 passed, 1 skipped
  • новый тест: карточка нового фронта разбирается ВМЕСТЕ с графиком цен (labels/values доезжают до realty_valuation_chart)
  • тест стены капчи переписан на «Вы не робот?» — зелёный без ложного маркера
  • прод: прогон newbuilding_enrich → строки в houses_price_dynamics свежее 2026-07-26

Refs #2767

## Гипотеза про разметку всё-таки верна — но не для тех страниц После #2798/#2801 обогащение поехало (15 из 25 против 0 из 25 девять суток), но часть страниц продолжала не разбираться, приходя **целиком**: 682-886 КБ, ни капчи, ни WAF. Живая проба 2026-08-09 показала, что на них лежит: ``` zhk-kosmos-ekb-i.cian.ru: len=810478 state=no MFE в _cianConfig: [..., 'newbuilding-card-desktop-fichering-frontend'] ``` Старого имени `newbuilding-card-desktop-frontend` на такой странице **нет вовсе**. Циан раскатывает новый фронт карточки ЖК на часть новостроек. Состояние лежит под тем же ключом `initialState` и той же формы: ``` newbuilding-card-desktop-fichering-frontend: newbuilding.id=3235089 name='Космос' rv.data keys=['lastUpdatedText', 'priceDynamics', 'pricesFiltersData', 'promo'] ``` ## Это и есть ответ про houses_price_dynamics Последняя строка там — 2026-07-26. Складывались две причины: 1. ЖК, переехавшие на новый фронт: график цен есть, но старое имя MFE его не находило; 2. ЖК, оставшиеся на старом фронте: у многих `realtyValuation.data` попросту `{}` — Циан считает динамику раз в месяц и не для всех (проверено: у `zhk-svetlyy-ekb-i.cian.ru` данные есть и разбираются ТЕКУЩИМ `_extract_chart`, у `zhk-pihtovyy` — пусто). Вместе это давало ноль строк при внешне успешном обогащении. ## Вторая правка: снята голая подстрока «captcha» Любая здоровая карточка ЖК грузит скрипт SmartCaptcha, поэтому подстрока есть **всегда**. На проде это выглядело так: ``` 18:22:04 BrowserFetcher: lease id=11 (cian) BANNED — cian newbuilding: captcha 18:22:04 zhk-utes-ekb-i.cian.ru: initialState extraction failed — html_len=710998 antibot_markers=captcha ``` Здоровый узел, целая страница, никакой капчи — бан по слову. Стена капчи опознаётся своим заголовком «Вы не робот?»: он в списке и на всех 15-килобайтных стенах срабатывал **вместе** с «captcha», так что детект не теряется, а ложный сигнал уходит. Строка отказа теперь называет, в каких именно MFE искали, — чтобы следующий такой переезд читался с первой строки лога, а не с третьей итерации. ## Test plan - [x] `pytest -k "newbuilding or cian"` — 250 passed, 1 skipped - [x] новый тест: карточка нового фронта разбирается ВМЕСТЕ с графиком цен (labels/values доезжают до `realty_valuation_chart`) - [x] тест стены капчи переписан на «Вы не робот?» — зелёный без ложного маркера - [ ] прод: прогон `newbuilding_enrich` → строки в `houses_price_dynamics` свежее 2026-07-26 Refs #2767
bot-backend added 1 commit 2026-08-09 18:30:40 +00:00
fix(tradein/cian): Циан переименовал MFE карточки ЖК — читать оба имени (#2767)
All checks were successful
CI / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 9s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 3m52s
9df51d8471
Живая проба 2026-08-09 по страницам, которые приходят ЦЕЛИКОМ (810-993 КБ, ни
капчи, ни WAF) и всё равно не разбираются:

    zhk-kosmos-ekb-i.cian.ru → MFE на странице:
        newbuilding-card-desktop-fichering-frontend
    старого 'newbuilding-card-desktop-frontend' на ней НЕТ вовсе

Циан раскатывает новый фронт карточки ЖК на часть новостроек. Состояние лежит
под тем же ключом `initialState` и имеет ту же форму: `newbuilding.id`/`name` на
месте, `realtyValuation.data.priceDynamics` — тоже.

Это объясняет пустую houses_price_dynamics с 2026-07-26. У ЖК, переехавших на
новый фронт, график цен есть, но старое имя MFE его не находило; ЖК, оставшиеся
на старом фронте, часто просто не имеют графика (rv.data = {}), и вместе это
давало ноль строк при внешне успешном обогащении.

Заодно снята голая подстрока "captcha" из _ANTIBOT_MARKERS: ЛЮБАЯ здоровая
карточка грузит скрипт SmartCaptcha, поэтому она есть всегда, и на проде отказ
разбора большой страницы сопровождался баном ЗДОРОВОГО узла с причиной
"captcha". Стена капчи опознаётся по своему заголовку «Вы не робот?» — он в
списке и срабатывал вместе с "captcha" на всех 15-килобайтных стенах, так что
детект не теряется. Строка отказа теперь называет, в каких MFE искали.

Тесты: карточка нового фронта разбирается вместе с графиком; стена капчи
по-прежнему опознаётся без ложного маркера.

Refs #2767
bot-backend merged commit 9cd6db023b into main 2026-08-09 18:41:03 +00:00
bot-backend deleted branch fix/2767-fichering-mfe 2026-08-09 18:41:03 +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#2804
No description provided.