Commit Graph
64 Commits
Author SHA1 Message Date
protokey 49a2f3024a feature: действие inner_text; запросы v2 в test_main.http 2026-10-13 20:21:17 +04:00
protokeyandClaude Opus 5.5 6ce8a8c648 chore: окружение по умолчанию в ~/.py_envs/robotex, VENV переопределяется
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:21:17 +04:00
protokeyandClaude Opus 5.5 7b511d5d38 feature: архитектура v2 — api + очередь + worker, удержание окна браузера (#78)
- Сервис api (FastAPI, без Chrome): POST /v2/tasks, GET /v2/tasks/{id} (доступ по cookie
  сессии), DELETE /v2/sessions/current; /v1/solve — прежний контракт поверх очереди.
- Сервис worker (dramatiq + RabbitMQ): слоты браузера, окна сессий между задачами
  (browser_idle_timeout 0–120 мин, простой — TTL ключа в Redis), heartbeat.
- Маршрутизация задач сессии в персональную очередь воркера с открытым окном.
- Redis: задачи, результаты (RESULT_TTL_HOURS), окна, воркеры. Прокси и ключ 2captcha
  в Redis не сохраняются.
- Движок: AsyncStealthySession.run() — действия на текущей странице без навигации.
- Два образа (robotex-api, robotex-worker), compose с rabbitmq и redis,
  make up/down/logs/smoke, релиз собирает все образы.
- Тесты: api + worker в одном процессе (fakeredis), настоящий воркер dramatiq на
  StubBroker, браузерные тесты на новой схеме, smoke для запущенного стенда.
- Документация: README, API (v2), Deployment, Usage.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:13:52 +04:00
protokeyandClaude Opus 5.5 fe509c25c3 feature!: параметр user_agent убран, UA всегда родной; docs/Usage.md
- user_agent в запросе → 422 с подсказкой брать UA из ответа: UA, отличный от реального
  Chrome, расходится с userAgentData и движком, Cloudflare такой браузер не пропускает
  (замер: родной 3/3, Chrome 147 и Windows — 0) (#87)
- профиль хранит только отпечаток (экран, DPR), UA не подменяется (#89)
- docs/Usage.md: практики для клиентов API — тот же UA и прокси, что у браузера, сессии,
  cookies, ошибки и повторы, таймауты, пример на httpx
- README, docs/API.md, docs/Introduction.md; тесты под новый контракт

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 18:19:08 +04:00
protokeyandClaude Opus 5.5 0ae5b0c83f test: юнит-тесты и сквозные тесты с Chrome (#21)
- tests/unit (make test, без браузера, ~5 с): схемы и валидация, /v1/solve с подменённым
  движком (коды ошибок, слоты, сессии, UA и cookies профиля, маскирование секретов в логах),
  действия, оркестратор антибота, профиль и отпечаток
- tests/browser (make test-browser, в Docker): example.com, UA один раз и замена cookies
  на httpbin, применение и стабильность отпечатка, прохождение Cloudflare
- requirements-dev.txt, make sync-dev; Makefile вызывает pip через python -m pip
  (у перенесённого .venv битый shebang bin/pip)
- fix: в CloudflareSolver вызов bounding_box() у неожиданной корутины — ветка без iframe
  всегда падала с AttributeError

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 18:10:21 +04:00
protokeyandClaude Opus 5.5 58100fa45d feature: UA и отпечаток задаются профилю один раз, cookies запроса заменяют профильные
- user_agent записывается в профиль при первом запросе сессии, дальше игнорируется (#87)
- переданные cookies заменяют cookies профиля (clear_cookies перед add_cookies) (#88)
- без user_agent профилю генерируется отпечаток browserforge (Linux Chrome): UA с версией
  установленного Chrome, экран и devicePixelRatio; только нативная эмуляция, без JS (#89)
- make fp-check: проверка, что отпечаток применяется и стабилен, и доля различий профилей

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 17:23:01 +04:00
protokeyandClaude Opus 5.5 a399f7f8cc docs: README и docs приведены к реализации (#50)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.0.2
2026-10-13 14:52:12 +04:00
protokeyandClaude Opus 5.5 437ea27be7 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>
2026-10-13 14:52:12 +04:00
protokey f58306cbb4 chore: настроена команда сборки 2026-10-12 14:20:46 +04:00
protokey b8499e2ce6 chore: updated 2026-10-12 14:11:09 +04:00
protokeyandClaude Opus 5.5 a319b81d8b build: лимиты ресурсов, прокси и нагрузочный тест; docs: API
- docker-compose: cpus/mem_limit через API_CPUS/API_MEM_LIMIT, прокси gost в профиле loadtest
- tests/loadtest.py: параллельные запросы к /v1/solve + пики docker stats
- docs/API.md: справочник по запросу, действиям, ответу и сессиям
- docs/Deployment.md: результаты замеров и правило подбора BROWSER_SLOTS

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.0.1
2026-10-12 13:55:36 +04:00
protokeyandClaude Opus 5.5 df108dae3f fix: ложный status ok и падение без captcha_type
- без captcha_type шаг антибота пропускается, на неизвестный тип — понятная ошибка
- wait_for и pass_challenge при неудаче падают, а не возвращают текст ошибки как результат
- status "err" ставится по упавшему действию (раньше проверялся несуществующий ключ error)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:55:36 +04:00
protokey c54500b178 chore: улучшена логика работы с учетом слотов 2026-10-12 13:17:34 +04:00
protokey 08a7501d31 docs: задачи теперь в редмайне 2026-10-12 12:56:40 +04:00
protokey 7e148f0393 chore: updated 2026-10-11 00:32:47 +04:00
protokeyandClaude Opus 5.5 ae5cefc6df chore: __pycache__ в .gitignore
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:28:44 +04:00
protokeyandClaude Opus 5.5 08a6b52b9d build: сборка в docker
- Dockerfile: python 3.12, Google Chrome (patchright), Xvfb, tini как PID 1 против зомби-процессов
- docker-compose: volume для extra/, shm_size 2gb, порт через API_PORT
- requirements: добавлены playwright и camoufox
- docs: Deployment.md, README и доки актуализированы под Chrome

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:17:28 +04:00
protokey 4e930caccb docs: updated 2026-10-05 18:55:09 +04:00
protokey b5bdbbda49 docs: updated 2026-09-23 16:52:15 +04:00
protokey 51a801f612 fix: из-за этого не дает пройти cf_turnstile 2026-09-23 16:51:05 +04:00
protokey eefcf7a0a9 chore: апи всегда возвращает ответ 2026-09-23 16:49:05 +04:00
protokey dc441e60ef fix: повышение стабильности обхода cf_turnstile 2026-09-23 16:48:55 +04:00
protokey 405e5ed2d0 chore: настройка определения что мы на странице cf_turnstile 2026-09-23 16:33:10 +04:00
protokey 257310b7d5 chore: перетащил обертку над браузером из scrapling 2026-09-23 15:54:48 +04:00
protokey 8f8bc62ae7 chore: попытка сделать так же как у scrapling 2026-09-23 14:40:50 +04:00
protokey 8a464391a2 docs: update 2026-09-23 12:16:51 +04:00
protokey c8692c382c docs: завел список дел 2026-09-23 11:21:50 +04:00
protokey 8f7645b2b9 feature!: перенимаем реализацию прохождения cf_turnstile у scrapling
https://github.com/D4Vinci/Scrapling

BREAKING_CHANGES: клик отрабатывает, но прохода не случается
2026-09-23 11:21:18 +04:00
protokey f2d4d441f4 feature: переезд на хром 2026-09-22 22:41:14 +04:00
protokey 714cf9f922 refactor: короче не кликает. похоже нужно переезжать на хром 2026-09-22 19:35:33 +04:00
protokey f1ed6edc7a feature!: добавлен обход claudflare
не кликает!
2026-09-22 18:56:50 +04:00
protokey 40e5d046a9 chore: пробуем другой подход для клика по элементу 2026-09-22 13:50:08 +04:00
protokey 5146f74e43 feature: добавлена реализация antibot для cloudflare 2026-09-22 13:49:30 +04:00
protokey a0170c9754 chore: реализация детектора обязана установить stage
типо сигнал, что детект отработал корректно
2026-09-22 13:48:34 +04:00
protokey 23f8ee4360 docs: updated 2026-09-21 20:24:09 +04:00
protokey bb4438b115 chore: улучшение работы метода отправки капчи 2026-09-21 19:56:53 +04:00
protokey b339d43d53 chore: кеширование для методов решения капчи 2026-09-21 19:35:43 +04:00
protokey 1cfd9bafef chore: настроен обход антибот защиты 2026-09-21 19:33:49 +04:00
protokey 4cc068a616 fix: добавление обхода для recaptcha 2026-09-18 19:15:44 +04:00
protokey b77f25d3cd fix: исправлены локаторы для индикации окна с картинками 2026-09-18 16:21:43 +04:00
protokey ce68d2727c chore: добавлена возможность передавать локатор для выбора элемента сигнализирующего о странице антибот защиты 2026-09-18 16:21:07 +04:00
protokey 6124c604d9 chore: перенос этапа прохождения антибот защиты в метод исполнения команд
это позволит выполнять проверку и обход защиты между командами
2026-09-18 14:31:51 +04:00
protokey d6bb88ead2 docs: updated 2026-09-18 14:30:58 +04:00
protokey 1d2fdeae70 feature!: добавлен механизм обхода антибот защиты 2026-09-17 15:49:12 +04:00
protokey f5871710ab chore: добавлена поддержка решения капчи hcaptcha на формах 2026-09-11 22:42:34 +04:00
protokey 89b4dd2677 docs: updated 2026-09-11 00:12:38 +04:00
protokey b27fbb5636 docs: updated 2026-09-11 00:11:43 +04:00
protokey 733536e83e chore: добавил команду подождать 2026-09-10 23:59:08 +04:00
protokey 6e76d08de3 chore: реализованы методы взаимодействия со страницей 2026-09-10 23:36:27 +04:00
protokey 1a45976356 chore: общие правки 2026-09-10 22:43:52 +04:00