[tradein][scrapers] Post-merge polish PR #1809 (avito SERP browser) — косметические минор'ы из ревью #1811

Closed
opened 2026-06-19 17:57:24 +00:00 by lekss361 · 1 comment
Owner

Follow-up к merged PR #1809 (avito SERP → BrowserFetcher). Косметические минор'ы из код-ревью — не блокеры, функционально ничего не ломают, но стоит подчистить core SERP-путь.

Что сделать

  1. avito.py (__aenter__, ~стр.343) — унифицировать settings.scraper_fetch_mode != "curl_cffi"== "browser" (как в scrape_pipeline.py:190,541,1032 и avito_detail_backfill.py:92). Сейчас при добавлении 3-го значения режима __aenter__ поднимет browser, а pipeline уйдёт в cffi-ветку. При текущем Literal["curl_cffi","browser"] расхождение недостижимо — чисто consistency.

  2. _fetch_serp_html_browser (avito.py, ~стр.461) — пустой "" HTML от tradein-browser (таймаут рендера) не является firewall-страницей (_is_firewall_page("") → False) → возвращается как «валидный» → _parse_html("") = [] → caller break. Работает, но неявно. Добавить явный if not html: return None или коммент.

  3. test_avito_browser_mode.py:156-166 — тест ставит scraper._browser напрямую (минуя __aenter__) и ассертит scraper._cffi is None. После реального __aenter__ в browser-mode _cffi НЕ None (поднимается fallback). Коммент вводит в заблуждение — переформулировать: # _cffi not armed (direct _browser assignment, bypasses __aenter__).

  4. scrape_pipeline.py (browser-mode sweep) — при shared-browser _cffi=None → cffi-fallback молча пропускается (by design). Добавить logger.debug("avito pipeline-mode: shared browser only, no cffi fallback") в момент scraper._browser = shared_bf — для observability при firewall.

Связанный мониторинг (из ревью #1810)

  • Мониторить Sentry-тег cian: totalOffers=None — captcha-retry в cian.py теперь без sleep (прокси ротирует сам, _rotate_ip no-op). Если retry-rate > 5% бакетов — добавить короткий sleep (~3-5s) перед повтором или server-side «rotate and wait».

Усилие

XS (косметика + 1 log + тест-коммент). priority/p3.

Файлы: avito.py, test_avito_browser_mode.py, scrape_pipeline.py. Cross-ref #1805/#1809 (avito SERP), #1806/#1810 (cian SERP), epic #883.

Follow-up к merged PR #1809 (avito SERP → BrowserFetcher). Косметические минор'ы из код-ревью — **не блокеры, функционально ничего не ломают**, но стоит подчистить core SERP-путь. ## Что сделать 1. **`avito.py` (`__aenter__`, ~стр.343)** — унифицировать `settings.scraper_fetch_mode != "curl_cffi"` → `== "browser"` (как в `scrape_pipeline.py:190,541,1032` и `avito_detail_backfill.py:92`). Сейчас при добавлении 3-го значения режима `__aenter__` поднимет browser, а pipeline уйдёт в cffi-ветку. При текущем `Literal["curl_cffi","browser"]` расхождение недостижимо — чисто consistency. 2. **`_fetch_serp_html_browser` (avito.py, ~стр.461)** — пустой `""` HTML от tradein-browser (таймаут рендера) не является firewall-страницей (`_is_firewall_page("") → False`) → возвращается как «валидный» → `_parse_html("")` = `[]` → caller break. Работает, но неявно. Добавить явный `if not html: return None` или коммент. 3. **`test_avito_browser_mode.py:156-166`** — тест ставит `scraper._browser` напрямую (минуя `__aenter__`) и ассертит `scraper._cffi is None`. После реального `__aenter__` в browser-mode `_cffi` НЕ None (поднимается fallback). Коммент вводит в заблуждение — переформулировать: `# _cffi not armed (direct _browser assignment, bypasses __aenter__)`. 4. **`scrape_pipeline.py` (browser-mode sweep)** — при shared-browser `_cffi=None` → cffi-fallback молча пропускается (by design). Добавить `logger.debug("avito pipeline-mode: shared browser only, no cffi fallback")` в момент `scraper._browser = shared_bf` — для observability при firewall. ## Связанный мониторинг (из ревью #1810) - Мониторить Sentry-тег `cian: totalOffers=None` — captcha-retry в `cian.py` теперь без `sleep` (прокси ротирует сам, `_rotate_ip` no-op). Если retry-rate > 5% бакетов — добавить короткий sleep (~3-5s) перед повтором или server-side «rotate and wait». ## Усилие XS (косметика + 1 log + тест-коммент). priority/p3. **Файлы:** `avito.py`, `test_avito_browser_mode.py`, `scrape_pipeline.py`. Cross-ref #1805/#1809 (avito SERP), #1806/#1810 (cian SERP), epic #883.
lekss361 added the
priority/p3
scope/backend
scrapers
status/ready
tech-debt
tradein
labels 2026-06-19 17:57:35 +00:00
Collaborator

Закрыто — PR #1909: unify fetch_mode guard (== "browser") + empty-render guard в _fetch_serp_html_browser + debug-logging shared-browser. 17 browser + 75 broad avito тестов зелёные.

✅ Закрыто — PR #1909: unify fetch_mode guard (`== "browser"`) + empty-render guard в `_fetch_serp_html_browser` + debug-logging shared-browser. 17 browser + 75 broad avito тестов зелёные.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1811
No description provided.