[tradein][scrapers] tradein-browser: снизить per-page fan-out — within-provider rate-cap прокси (~12% fetch-fail при бэкфиле) #1812

Closed
opened 2026-06-19 18:23:18 +00:00 by lekss361 · 0 comments
Owner

Контекст

После per-provider концепции (#1793) выявлена проблема: каждый camoufox page.goto фанится в десятки под-ресурсных коннектов (JS/CSS/XHR/шрифты) через прокси. Мобильный прокси-аккаунт держит ~5 параллельных коннектов → одна страница близко к лимиту, 2-3 back-to-back страницы на ОДНОМ аккаунте → NS_ERROR_PROXY_TOO_MANY_REQUESTS / HTTP 500.

Что УЖЕ сделано (env, 2026-06-19)

Per-provider прокси-изоляция — каждый поставщик на своём live-аккаунте (проверено, все 4 живы, разные IP):

  • avito → auv.mobileproxy.space:10049 (94.25.229.1)
  • cian → ha.mobileproxy.space:2013 (128.70.191.247)
  • yandex → ti.mobileproxy.space:1493 (128.71.149.46)
  • generic → mproxy.site:14619 (128.70.170.36)

Cross-provider контеншн устранён: burst-тест (avito+cian+yandex одновременно) — avito/yandex чистые (раньше падали из-за общего ha).

Residual (этот issue)

Within-provider: single source с быстрыми back-to-back страницами на своём аккаунте → ~12% fetch-fail (замерено на cian detail-backfill: 7/8 succeeded, 1× 500; + 9 событий 500/TOO_MANY в окне). 3×cian в burst → cian-C падает даже после изоляции.

Что сделать (browser-сервис tradein-mvp/browser/server.py)

Снизить число одновременных под-коннектов на одну страницу. Варианты (выбрать/скомбинировать, тестировать anti-bot):

  1. Block heavy sub-resources через page.route("**/*", ...): abort resource_type in {image(уже block_images), media, font}. ⚠️ CSS/JS НЕ блокировать (нужны для рендера state + anti-bot fingerprint может проверять CSS). Данные парсятся из HTML/JS-state, не из media/fonts → безопасно для extraction.
  2. Per-provider inter-page pacing: небольшой delay (2-3s) между последовательными page.goto одного провайдера (дать коннектам дренироваться). Дополняет per-provider lock.
  3. (опц.) BROWSER_BLOCK_RESOURCES env-флаг для тюнинга без редеплоя.

Acceptance

Re-run burst: 3 параллельных cian-фетча (через per-provider lock сериализуются) → все 3 succeed без 500/TOO_MANY. Cian detail-backfill batch=8 → 8/8 succeeded.

Усилие

M (route-handler + pacing + тест на anti-bot не-триггере). Разблокирует параллельный быстрый fill без потерь.

Файлы: tradein-mvp/browser/server.py. Cross-ref #1793 (per-provider), #883. Анализ: vault research/Avito_Scraper_Endpoint_Map_0619.md.

## Контекст После per-provider концепции (#1793) выявлена проблема: каждый camoufox `page.goto` фанится в **десятки под-ресурсных коннектов** (JS/CSS/XHR/шрифты) через прокси. Мобильный прокси-аккаунт держит ~5 параллельных коннектов → одна страница близко к лимиту, 2-3 back-to-back страницы на ОДНОМ аккаунте → `NS_ERROR_PROXY_TOO_MANY_REQUESTS` / HTTP 500. ## Что УЖЕ сделано (env, 2026-06-19) **Per-provider прокси-изоляция** — каждый поставщик на своём live-аккаунте (проверено, все 4 живы, разные IP): - avito → `auv.mobileproxy.space:10049` (94.25.229.1) - cian → `ha.mobileproxy.space:2013` (128.70.191.247) - yandex → `ti.mobileproxy.space:1493` (128.71.149.46) - generic → `mproxy.site:14619` (128.70.170.36) → **Cross-provider контеншн устранён**: burst-тест (avito+cian+yandex одновременно) — avito/yandex чистые (раньше падали из-за общего `ha`). ## Residual (этот issue) Within-provider: single source с быстрыми back-to-back страницами на своём аккаунте → ~**12% fetch-fail** (замерено на cian detail-backfill: 7/8 succeeded, 1× 500; + 9 событий 500/TOO_MANY в окне). 3×cian в burst → cian-C падает даже после изоляции. ## Что сделать (browser-сервис `tradein-mvp/browser/server.py`) Снизить число одновременных под-коннектов на одну страницу. Варианты (выбрать/скомбинировать, тестировать anti-bot): 1. **Block heavy sub-resources** через `page.route("**/*", ...)`: abort `resource_type in {image(уже block_images), media, font}`. ⚠️ CSS/JS НЕ блокировать (нужны для рендера state + anti-bot fingerprint может проверять CSS). Данные парсятся из HTML/JS-state, не из media/fonts → безопасно для extraction. 2. **Per-provider inter-page pacing**: небольшой delay (2-3s) между последовательными `page.goto` одного провайдера (дать коннектам дренироваться). Дополняет per-provider lock. 3. (опц.) `BROWSER_BLOCK_RESOURCES` env-флаг для тюнинга без редеплоя. ## Acceptance Re-run burst: 3 параллельных cian-фетча (через per-provider lock сериализуются) → **все 3 succeed** без 500/TOO_MANY. Cian detail-backfill batch=8 → 8/8 succeeded. ## Усилие M (route-handler + pacing + тест на anti-bot не-триггере). Разблокирует **параллельный быстрый fill без потерь**. **Файлы:** `tradein-mvp/browser/server.py`. Cross-ref #1793 (per-provider), #883. Анализ: vault `research/Avito_Scraper_Endpoint_Map_0619.md`.
Sign in to join this conversation.
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#1812
No description provided.