[docs]classCamoufoxFamily(BrowserFamily):""" Camoufox — a separate runtime. Launched as a context manager. Stealth is NOT needed/allowed (antibot is built-in). """def__init__(self)->None:self._cm:Any|None=None# AsyncCamoufox runtime CMself._browser:Browser|None=None# кэшself._launch_opts_used:Dict[str,Any]|None=None@property
[docs]asyncdefstart(self,cfg:DesiredConfig)->None:assertcfg.family=="camoufox","wrong family for CamoufoxFamily"ifcfg.stealth:raiseRuntimeError("stealth is incompatible with engine='camoufox'.")need_relaunch=(self._cmisNoneorself._browserisNoneorself._launch_opts_used!=cfg.launch_opts)ifneed_relaunch:awaitself.close()try:fromcamoufox.async_apiimportAsyncCamoufoxasAsyncCamoufoxRTexceptException:raiseRuntimeError("engine='camoufox', но пакет 'camoufox' не установлен. ""Установите: pip install camoufox")kwargs=dict(cfg.launch_opts)kwargs["persistent_context"]=False# гарантируем неперсистентный режимself._cm=AsyncCamoufoxRT(**kwargs)browser_obj=awaitself._cm.__aenter__()ifnotisinstance(browser_obj,Browser):raiseRuntimeError("Camoufox did not return a Browser in non-persistent mode.")self._browser=browser_objself._launch_opts_used=dict(cfg.launch_opts)