diff --git a/tradein-mvp/backend/scripts/domclick_local_runner.py b/tradein-mvp/backend/scripts/domclick_local_runner.py index de9542f8..26e7ff9e 100644 --- a/tradein-mvp/backend/scripts/domclick_local_runner.py +++ b/tradein-mvp/backend/scripts/domclick_local_runner.py @@ -770,7 +770,15 @@ async def fetch_serp_page( DomClickBlockedError: 403 или QRATOR-маркеры в title. """ resp = await page.goto(url, wait_until="domcontentloaded", timeout=70000) - await asyncio.sleep(random.uniform(*render_wait)) # дать SSR отрендериться + # SERP рендерит карточки клиентской гидрацией через ~6-12с после domcontentloaded. + # Фиксированный sleep хрупок: при медленном ответе DOM ещё пуст → 0 ids (silent + # 0-coverage). Ждём появления card-ссылок ЯВНО; genuinely-пустой ценовой band → + # timeout → 0 offers (корректно). render_wait остаётся коротким settle поверх. + try: + await page.wait_for_selector("a[href*='/card/']", timeout=12000) + except Exception: + pass # пустой band или медленный рендер — читаем как есть (0 offers) + await asyncio.sleep(random.uniform(*render_wait)) # settle: дорисовать все 20 + title status = resp.status if resp else 0 title = "" try: