Изученные источники:
https://github.com/CloakHQ/CloakBrowserна коммитеb06499bhttps://github.com/CloakHQ/CloakBrowser-Managerна коммитеa85b213
- Когда упираемся в anti-bot, нужен настоящий пропатченный браузер. CloakBrowser — это не просто JS stealth-инъекции: он поставляет пропатченный Chromium и даёт Playwright-совместимый
launchPersistentContext(). - Постоянные не-incognito профили важны. CloakBrowser и Manager предпочитают постоянные директории user data: так сохраняются cookies/localStorage и меньше риск детекта, характерного для incognito-сессий.
- «Человечные» действия в интерфейсе — часть fallback-сценария. Их слой
humanizeпечатает, кликает и скроллит с реалистичными задержками и через доверенные input-пути. Для Z.ai это особенно важно, когда прямойfetch()из браузерного контекста попадает в captcha/WAF и приходится отправлять запрос через видимый UI. - Согласованность locale/timezone/proxy важна. CloakBrowser прокидывает timezone/locale через флаги браузера и может согласовывать их с IP прокси (
geoip). В этом проекте для Z.ai это вынесено в env-переменные, чтобы не хардкодить один fingerprint. - Нужно чистить старые lock-файлы профиля. Manager удаляет
SingletonLock,SingletonCookieиSingletonSocketперед запуском, чтобы упавшие браузерные сессии не ломали следующий старт профиля.
- Добавлен опциональный режим
ZAI_BROWSER_ENGINE=cloakдля browser fallback. - Добавлены зависимости
cloakbrowserиplaywright-core. - Движком по умолчанию оставлен
puppeteer, чтобы не заставлять каждого пользователя скачивать бинарник CloakBrowser примерно на 200 МБ. - Для Cloak-режима используется отдельный профиль по умолчанию (
~/.free-glm-kimi-api/zai-cloak-profile), чтобы он не падал на профиле, ранее созданном обычным Chrome/Puppeteer. - Cloak-режим использует
launchPersistentContext()с:userDataDir=ZAI_BROWSER_PROFILE_DIR/ профиль Z.ai по умолчанию;- включённым по умолчанию
humanize; - поддержкой env-переменных для locale/timezone/proxy/geoip;
- постоянным не-incognito профилем.
- Добавлена очистка старых lock-файлов для обоих движков.
- UI fallback для ввода промпта изменён с прямого присваивания value на click/select/type со случайными задержками, где это поддерживается.
- Расширена классификация captcha/WAF для маркеров Aliyun/WAF.
ZAI_BROWSER_ENGINE=cloak \
ZAI_BROWSER_FALLBACK=1 \
ZAI_BROWSER_HEADLESS=0 \
ZAI_BROWSER_HUMANIZE=1 \
MODEL=GLM-5.1 npm run smoke:zaiДополнительно:
ZAI_BROWSER_PROFILE_DIR=...ZAI_BROWSER_PROXY=http://user:pass@host:portилиsocks5://...ZAI_BROWSER_GEOIP=1ZAI_BROWSER_LOCALE=ru-RUZAI_BROWSER_TIMEZONE=Europe/SamaraZAI_BROWSER_ARGS="--flag=value ..."
CloakBrowser может уменьшить automation fingerprints и предотвратить часть проверок, но он не решает уже сработавшую captcha на аккаунте/IP магическим образом. Если Z.ai требует ручную проверку, открой тот же постоянный профиль в видимом режиме и один раз пройди проверку руками.