Compare commits
2 commits
9b1f064069
...
0f7f5ea0ab
| Author | SHA1 | Date | |
|---|---|---|---|
| 0f7f5ea0ab | |||
| 3cc015c249 |
1 changed files with 13 additions and 4 deletions
|
|
@ -770,7 +770,15 @@ async def fetch_serp_page(
|
||||||
DomClickBlockedError: 403 или QRATOR-маркеры в title.
|
DomClickBlockedError: 403 или QRATOR-маркеры в title.
|
||||||
"""
|
"""
|
||||||
resp = await page.goto(url, wait_until="domcontentloaded", timeout=70000)
|
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
|
status = resp.status if resp else 0
|
||||||
title = ""
|
title = ""
|
||||||
try:
|
try:
|
||||||
|
|
@ -844,10 +852,11 @@ async def _paginate(
|
||||||
)
|
)
|
||||||
if not offers:
|
if not offers:
|
||||||
break
|
break
|
||||||
added = _add_offers(offers, seen, done, out, target_new)
|
# NB: НЕ break при added==0. При resume первые страницы бакета — это топ-qi
|
||||||
|
# офферы, уже лежащие в `done` → added=0, но новые id есть на след. страницах.
|
||||||
|
# Терминаторы — только пустая страница (выше) и offset>=bound (total/cap).
|
||||||
|
_add_offers(offers, seen, done, out, target_new)
|
||||||
page_idx += 1
|
page_idx += 1
|
||||||
if added == 0:
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
async def _sweep_bucket(
|
async def _sweep_bucket(
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue