diff --git a/tradein-mvp/browser/server.py b/tradein-mvp/browser/server.py index 093c5612..8fd66c4e 100644 --- a/tradein-mvp/browser/server.py +++ b/tradein-mvp/browser/server.py @@ -950,9 +950,9 @@ async def fetch_handler(request: web.Request) -> web.Response: if not url: return web.json_response({"error": "missing 'url' field"}, status=400) - # origin (опционально) — same-site якорь, на который камуфокс зайдёт ПЕРЕД url - # (органическая навигация: реальные cookies/Referer вместо холодного goto, - # зеркалит /fetch-json #1917). Явного auto-derive из url здесь НЕТ (в отличие + # origin (опционально) — same-site якорь, на который камуфокс зайдёт ПЕРЕД url, + # чтобы получить пропуск QRATOR в куки контекста (Referer тут ни при чём: goto() + # его не шлёт; зеркалит /fetch-json #1917). Явного auto-derive из url здесь НЕТ (в отличие # от fetch-json) — caller не передал → остаётся None, origin-goto не выполняется, # поведение идентично прежнему (avito/cian/yandex его никогда не передают). origin: str | None = body.get("origin") @@ -1492,10 +1492,15 @@ async def _fetch_once( параллелятся — recycle через _relaunch_browser безопасен прямо здесь. origin (опционально) — same-site якорь (например SERP), на который камуфокс - заходит ПЕРЕД целевым url: органическая навигация с реальными cookies/Referer - вместо холодного прямого захода (зеркалит _fetch_json_once, #1917 — DomClick - card-fetch, эмпирически подтверждено вживую 2026-07-04). None (дефолт) → поведение - не меняется, ровно один goto(url) как раньше (avito/cian/yandex не передают origin). + заходит ПЕРЕД целевым url, чтобы получить пропуск QRATOR в контексте (зеркалит + _fetch_json_once, #1917 — DomClick card-fetch, эмпирически подтверждено вживую + 2026-07-04). Работает это через КУКИ контекста, а не через Referer: goto() + заголовок Referer не шлёт вовсе, так что «органической навигации» тут никогда не + было — ценность ровно в прогретом контексте. Поэтому при reuse_context origin + поднимается ОДИН раз в якорной вкладке (_ensure_anchor_page), а не переоткрывается + перед каждой карточкой: контекст уже прогрет, повторный заход — трата рукопожатия. + None (дефолт) → поведение не меняется, ровно один goto(url) как раньше + (avito/cian/yandex не передают origin). cookies (опционально) — dict cookie_name→value для инъекции ДО любой навигации (обход QRATOR-блока DomClick при валидной test-аккаунт сессии, эмпирически