feat(scrapers): avito SERP дефолт на BrowserFetcher (camoufox), curl_cffi fallback (#1805) #1809

Merged
lekss361 merged 1 commit from feat/avito-serp-browser-default into main 2026-06-19 17:53:12 +00:00
Owner

Closes #1805 (epic #883 Phase 2).

Что

  • config.py: scraper_fetch_mode дефолт curl_cffibrowser.
  • avito.py: __aenter__ поднимает BrowserFetcher(source="avito") + curl_cffi как fallback. _fetch_serp_html → dispatcher (_browser/_cffi). Browser firewall → IP-ротация → исчерпана → 1 retry curl_cffi → AvitoBlockedError.
  • _is_firewall_page уже ловит бан в browser-HTML (text-маркеры). _rotate_ip не тронут (no-op без rotate_url).

Тесты

202 passed (SERP/pipeline/proxy/detail-backfill) + 98 (parse/houses/imv). ruff clean.

На ревью (важно)

  • Config-флип scraper_fetch_mode=browser глобальный → влияет НЕ только на SERP, но и на avito_detail_backfill (общий флаг). avito_detail уже умеет browser_mode, тесты зелёные — но подтвердить, что хотим browser-дефолт для ВСЕХ avito-путей сразу (а не только SERP).
  • Несоответствие: __aenter__ использует != "curl_cffi", pipeline == "browser" — расходятся только на невалидных значениях (в рантайме Literal, не достижимо).
  • Fallback гейтится на self._cffi is not None; в pipeline-режиме (shared browser, _cffi=None) fallback пропускается — поведение как раньше.
Closes #1805 (epic #883 Phase 2). ## Что - `config.py`: `scraper_fetch_mode` дефолт `curl_cffi` → **`browser`**. - `avito.py`: `__aenter__` поднимает `BrowserFetcher(source="avito")` + curl_cffi как fallback. `_fetch_serp_html` → dispatcher (`_browser`/`_cffi`). Browser firewall → IP-ротация → исчерпана → 1 retry curl_cffi → `AvitoBlockedError`. - `_is_firewall_page` уже ловит бан в browser-HTML (text-маркеры). `_rotate_ip` не тронут (no-op без rotate_url). ## Тесты 202 passed (SERP/pipeline/proxy/detail-backfill) + 98 (parse/houses/imv). ruff clean. ## На ревью (важно) - **Config-флип `scraper_fetch_mode=browser` глобальный** → влияет НЕ только на SERP, но и на `avito_detail_backfill` (общий флаг). avito_detail уже умеет browser_mode, тесты зелёные — но подтвердить, что хотим browser-дефолт для ВСЕХ avito-путей сразу (а не только SERP). - Несоответствие: `__aenter__` использует `!= "curl_cffi"`, pipeline `== "browser"` — расходятся только на невалидных значениях (в рантайме `Literal`, не достижимо). - Fallback гейтится на `self._cffi is not None`; в pipeline-режиме (shared browser, `_cffi=None`) fallback пропускается — поведение как раньше.
lekss361 added 1 commit 2026-06-19 17:45:44 +00:00
feat(scrapers): avito SERP дефолт на BrowserFetcher (camoufox), curl_cffi fallback (#1805)
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
93f7c9ae3f
lekss361 merged commit ebdd70a38d into main 2026-06-19 17:53:12 +00:00
lekss361 deleted branch feat/avito-serp-browser-default 2026-06-19 17:53:13 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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#1809
No description provided.