fix: слоты, безопасность, единый формат ответа и валидация
- слоты браузеров: asyncio.Semaphore, размер из BROWSER_SLOTS, при нехватке — 503 + Retry-After; устранена утечка счётчика при отказе (#12, #49) - session_id принимается только как UUID, путь профиля проверяется (#5) - секреты клиента в логах маскируются, полный дамп — только на DEBUG (#6) - ответ: status всегда "ok"/"err", поле code (no_slots / request_failed / challenge_failed / action_failed), response_model (#7) - непройденный антибот → challenge_failed, действия не выполняются (#8) - таймауты провайдеров в мс вынесены в константы; detect переживает навигацию посреди проверки; пауза между неудачными solve вместо холостого цикла (#9) - обязательные поля действий и формат прокси проверяются схемой → 422 до запуска браузера (#13) - прокси необязателен (#15) - user_agent сохраняется в профиле сессии и реально передаётся в браузер (#16) - duration_ms у действий и у запроса (#18), опция screenshot (#19) - общий конфиг логирования (LOG_LEVEL), print → логгер, CloudflareProvider, удалён cached_persistent, GET /health (#22) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f58306cbb4
commit
437ea27be7
14 files changed
+360
-201
No files matched your search
@@ -85,7 +85,6 @@ async def move_mouse_human(
|
||||
if i < steps:
|
||||
px += random.uniform(-1.5, 1.5)
|
||||
py += random.uniform(-1.5, 1.5)
|
||||
print("Move:", px, py)
|
||||
await page.mouse.move(px, py)
|
||||
await page.wait_for_timeout(step_delay_ms * random.uniform(0.7, 1.3))
|
||||
|
||||
@@ -103,13 +102,9 @@ async def click_human(
|
||||
"""move_mouse_human + клик с человеческой задержкой между наведением и down/up, вместо
|
||||
мгновенного page.mouse.click(x, y)."""
|
||||
await move_mouse_human(page, x, y, **move_kwargs)
|
||||
print('wait for timeout')
|
||||
await page.wait_for_timeout(random.uniform(50, 180))
|
||||
print('key down')
|
||||
await page.mouse.down(button=button)
|
||||
print('sleep')
|
||||
await page.wait_for_timeout(random.uniform(40, 99))
|
||||
print('key up')
|
||||
await page.mouse.up(button=button)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user