33from collections import defaultdict
44from dataclasses import dataclass , field
55from typing import Any
6+ import asyncio
67
78from camoufox .async_api import AsyncCamoufox
89from human_requests import (
@@ -44,6 +45,7 @@ class ChizhikAPI(ApiParent):
4445 browser_opts : dict [str , Any ] = field (default_factory = dict )
4546 """Дополнительные опции для браузера (см. https://camoufox.com/python/installation/)"""
4647 CATALOG_URL : str = "https://app.chizhik.club/api/v1"
48+ API_URL : str = "https://app.chizhik.club/api"
4749 """URL для работы с каталогом."""
4850 MAIN_SITE_URL : str = "https://chizhik.club/catalog/"
4951 """URL главной страницы сайта."""
@@ -101,9 +103,22 @@ async def _warmup(self) -> None:
101103 )
102104 await sniffer .start (self .ctx )
103105
106+ collected = {}
107+ def on_request (request ):
108+ if request .url .startswith (self .API_URL ):
109+ collected [request .url ] = request .headers
110+
111+ self .ctx .on ("request" , on_request )
112+
104113 await self .page .goto (self .MAIN_SITE_URL , wait_until = "networkidle" )
105114 await self .page .wait_for_selector ("next-route-announcer" , state = "attached" )
115+ await asyncio .sleep (1 )
116+ await self .page .locator ('main a[data-qa^="sidebar-sub-category-"][data-qa$="-link"]' ).first .click ()
117+ await self .page .locator ('main div[itemtype="https://schema.org/Product"]' ).first .click ()
118+ await asyncio .sleep (1 )
119+ await self .page .wait_for_load_state ("load" )
106120
121+ await self .ctx .unroute ("**/api/**" , on_request )
107122 result_sniffer = await sniffer .complete ()
108123
109124 # Результат: {заголовок: [уникальные значения]}
@@ -116,7 +131,7 @@ async def _warmup(self) -> None:
116131
117132 # Преобразуем set обратно в list
118133 self .unstandard_headers = {k : list (v )[0 ] for k , v in result .items ()}
119- self .unstandard_urls = result_sniffer [ "request" ]
134+ self .unstandard_urls = collected
120135
121136 await self .page .goto (self .CATALOG_URL , wait_until = "networkidle" )
122137
0 commit comments