docs(tradein/browser): origin работает через куки контекста, а не через Referer
All checks were successful
CI Trade-In / changes (pull_request) Successful in 14s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 15s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Successful in 1m37s

Оба комментария про origin обещали «органическую навигацию с реальными
cookies/Referer». Referer тут не при чём: playwright'овский goto() этот
заголовок не шлёт вовсе, так что органической навигацией заход на origin не был
никогда. Работает он через куки контекста — пропуск QRATOR, выданный на выдаче,
остаётся в контексте и годится для карточки.

Различие не косметическое: из «нужен Referer» следует, что origin надо
переоткрывать перед каждой карточкой, а из «нужны куки» — что достаточно одного
раза. Второе и делает якорная вкладка предыдущего коммита; заодно дописано,
почему при reuse_context повторный заход на выдачу не нужен.
This commit is contained in:
bot-backend 2026-08-29 21:27:12 +03:00
parent 5f1a2ec585
commit 2c29151e85

View file

@ -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_namevalue для инъекции ДО любой навигации
(обход QRATOR-блока DomClick при валидной test-аккаунт сессии, эмпирически