Выдача Яндекса капчит конкретные выходные узлы пула (замер владельца 29.08:
узлы 1/10/11 — капча, 9 и домашний IP — выдача), поэтому путь через поиск
срабатывал ~2 раза из 9 и стоил ~15 с на подъём якоря. В логах tradein-browser
15-16.09 все 7 попыток — капча, и все 7 через 0,2 с заканчивались «якорная
вкладка не поднялась (Error)». Referer карточке и так даёт переход с выдачи
площадки (detail.py: referer=origin).
Дефолт BROWSER_ANCHOR_VIA_SEARCH теперь пустой: путь через поиск остаётся,
но только по явному env. Тесты яндекс-пути включают его явно; новый тест
грузит модуль без env и проверяет, что якорь идёт прямым goto(origin).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PR #3258 научил якорную вкладку заходить на выдачу через поиск Яндекса, но две
ветки из трёх подставляли Referer, которого мы не заработали: «ссылку в выдаче не
нашли» ставила https://yandex.ru/, «клик увёл не туда» — URL поисковой выдачи. В
обоих случаях перехода с Яндекса на площадку НЕ БЫЛО, а заголовок утверждал
обратное.
Главная причина, по которой вторая ветка вообще срабатывала: ссылки в выдаче
Яндекса открываются в НОВОЙ вкладке (target="_blank"). Исходная страница остаётся
на Яндексе, проверка хоста не проходит — и вместо того, чтобы взять настоящую
новую вкладку, мы уходили в подстановку заголовка.
Теперь новая вкладка перехватывается: снимок context.pages до клика, сравнение
после; попап на нужном хосте становится ЯКОРНОЙ страницей (resource-block
применяется к ней — по наследству он не передаётся), вкладка с Яндексом
закрывается. Это и есть настоящий переход.
Оба фиктивных фолбэка выброшены. Не нашли ссылку, клик увёл не туда, попап не на
том хосте, капча, упавшая навигация — возвращаем None, и вызывающий идёт на origin
обычным goto БЕЗ Referer, ровно как до #3258. Принцип зафиксирован комментарием в
коде и на месте удалённой константы _YANDEX_REFERER, иначе его легко
«оптимизировать» обратно: либо переход был настоящим, либо об источнике молчим.
Тесты: 198 passed против 196 — попап на нужном хосте становится якорем и оригинал
закрыт; попап на чужом хосте → фолбэк без Referer; тест «ссылки нет» переписан, он
теперь требует отсутствия Referer вместо yandex.ru.
Якорная вкладка (#3244) открывала страницу выдачи Домклика без источника
перехода вообще. Передача referer на карточку (#3250) воспроизвела второй шаг
человеческого пути, но первый — «пришёл из поиска» — оставался невоспроизведённым.
Эталон — ручная сессия 29.08 через узел 10:
yandex.ru → клик по результату → выдача Домклика (Referer https://yandex.ru/)
→ клик → карточка (Referer = URL выдачи)
Теперь якорная вкладка идёт на yandex.ru/search, ищет среди результатов ссылку на
хост origin и КЛИКАЕТ по ней. Referer уходит не потому, что мы его подставили, а
потому, что переход действительно был.
Яндекс на мобильных прокси капризен — наблюдалась капча вживую, — поэтому
предусмотрены три контролируемых исхода, и ни один не роняет прогон:
- капча на выдаче либо упавшая навигация на Яндекс → прежний прямой goto(origin),
без referer, поведение до этой правки байт в байт;
- ссылки на хост в результатах нет → goto(origin, referer="https://yandex.ru/"):
визит на Яндекс был настоящий, заголовок честный;
- клик увёл не туда (редирект-обёртка Яндекса) → goto(origin, referer=URL выдачи),
точный адрес, а не общий yandex.ru.
Включено ТОЛЬКО для Домклика (BROWSER_ANCHOR_VIA_SEARCH=domclick по умолчанию);
Авито, Циан и Яндекс не трогаем — их проверять отдельно по #3251. Пустое значение
переменной возвращает сегодняшнее поведение целиком.
Тесты: 196 passed в сайдкаре против 191 — пять сценариев: успешный клик, откат по
капче, откат по отсутствию ссылки, провайдер вне списка, падение навигации.