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()
|
scraper = AvitoScraper()
|
||||||
if browser_mode:
|
if browser_mode:
|
||||||
scraper._browser = shared_bf
|
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:
|
else:
|
||||||
scraper._cffi = session
|
scraper._cffi = session
|
||||||
|
|
||||||
|
|
@ -1324,6 +1329,9 @@ async def run_avito_newbuilding_sweep(
|
||||||
scraper = AvitoScraper()
|
scraper = AvitoScraper()
|
||||||
if browser_mode:
|
if browser_mode:
|
||||||
scraper._browser = shared_bf
|
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:
|
else:
|
||||||
scraper._cffi = session
|
scraper._cffi = session
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -352,7 +352,7 @@ class AvitoScraper(BaseScraper):
|
||||||
logger.warning(
|
logger.warning(
|
||||||
"avito: proactive IP rotate at sweep start raised — proceeding", exc_info=True
|
"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
|
# Default (#1805): SERP-фетч через camoufox (tradein-browser per-provider
|
||||||
# + ротирующий backconnect-прокси). curl_cffi поднимаем тут же как
|
# + ротирующий backconnect-прокси). curl_cffi поднимаем тут же как
|
||||||
# FALLBACK — если браузер отдаёт firewall/пусто, _fetch_serp_html делает
|
# FALLBACK — если браузер отдаёт firewall/пусто, _fetch_serp_html делает
|
||||||
|
|
@ -546,6 +546,12 @@ class AvitoScraper(BaseScraper):
|
||||||
raise AvitoRateLimitedError(
|
raise AvitoRateLimitedError(
|
||||||
f"avito SERP browser-sidecar error (page={page}): {error_text[:200]}"
|
f"avito SERP browser-sidecar error (page={page}): {error_text[:200]}"
|
||||||
) from exc
|
) 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):
|
if not _is_firewall_page(html):
|
||||||
return html
|
return html
|
||||||
if rot_done < max_rot and await self._rotate_ip():
|
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
|
assert result == _NORMAL_HTML
|
||||||
mock_browser.fetch.assert_awaited_once_with("https://www.avito.ru/test")
|
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
|
assert scraper._cffi is None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue