fix(avito): post-merge polish — unify fetch_mode guard + empty-render guard (#1811) (#1909)
Some checks failed
Deploy Trade-In / build-backend (push) Blocked by required conditions
Deploy Trade-In / deploy (push) Blocked by required conditions
Deploy Trade-In / changes (push) Successful in 10s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Has been cancelled
Some checks failed
Deploy Trade-In / build-backend (push) Blocked by required conditions
Deploy Trade-In / deploy (push) Blocked by required conditions
Deploy Trade-In / changes (push) Successful in 10s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Has been cancelled
avito SERP browser post-merge polish (#1811): unify fetch_mode guard, empty-render guard, debug logging. Refs #1811
This commit is contained in:
parent
67d41df880
commit
5ed88c41a4
3 changed files with 17 additions and 2 deletions
|
|
@ -757,6 +757,11 @@ async def run_avito_city_sweep(
|
|||
scraper = AvitoScraper()
|
||||
if browser_mode:
|
||||
scraper._browser = shared_bf
|
||||
# Shared-browser режим: _cffi=None → curl_cffi-fallback на
|
||||
# firewall пропускается (by design). Логируем для observability.
|
||||
logger.debug(
|
||||
"avito pipeline-mode: shared browser only, no cffi fallback"
|
||||
)
|
||||
else:
|
||||
scraper._cffi = session
|
||||
|
||||
|
|
@ -1324,6 +1329,9 @@ async def run_avito_newbuilding_sweep(
|
|||
scraper = AvitoScraper()
|
||||
if browser_mode:
|
||||
scraper._browser = shared_bf
|
||||
# Shared-browser режим: _cffi=None → curl_cffi-fallback на firewall
|
||||
# пропускается (by design). Логируем для observability.
|
||||
logger.debug("avito pipeline-mode: shared browser only, no cffi fallback")
|
||||
else:
|
||||
scraper._cffi = session
|
||||
|
||||
|
|
|
|||
|
|
@ -352,7 +352,7 @@ class AvitoScraper(BaseScraper):
|
|||
logger.warning(
|
||||
"avito: proactive IP rotate at sweep start raised — proceeding", exc_info=True
|
||||
)
|
||||
if settings.scraper_fetch_mode != "curl_cffi":
|
||||
if settings.scraper_fetch_mode == "browser":
|
||||
# Default (#1805): SERP-фетч через camoufox (tradein-browser per-provider
|
||||
# + ротирующий backconnect-прокси). curl_cffi поднимаем тут же как
|
||||
# FALLBACK — если браузер отдаёт firewall/пусто, _fetch_serp_html делает
|
||||
|
|
@ -546,6 +546,12 @@ class AvitoScraper(BaseScraper):
|
|||
raise AvitoRateLimitedError(
|
||||
f"avito SERP browser-sidecar error (page={page}): {error_text[:200]}"
|
||||
) from exc
|
||||
# Пустой рендер ("" / None) = таймаут рендера sidecar'а, НЕ firewall:
|
||||
# _is_firewall_page("") вернул бы False → пустой HTML утёк бы как
|
||||
# «валидный». Возвращаем None — caller (fetch_around) трактует это как
|
||||
# конец пагинации (break), а не как бан.
|
||||
if not html:
|
||||
return None
|
||||
if not _is_firewall_page(html):
|
||||
return html
|
||||
if rot_done < max_rot and await self._rotate_ip():
|
||||
|
|
|
|||
|
|
@ -175,7 +175,8 @@ async def test_fetch_serp_html_browser_mode_returns_html() -> None:
|
|||
|
||||
assert result == _NORMAL_HTML
|
||||
mock_browser.fetch.assert_awaited_once_with("https://www.avito.ru/test")
|
||||
# _cffi was never set — assert remains None
|
||||
# _cffi not armed (direct _browser assignment bypasses __aenter__, which would
|
||||
# otherwise build the curl_cffi fallback session); the browser path never touches it.
|
||||
assert scraper._cffi is None
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue