fix: reCAPTCHA — окно с картинками определяется по положению (#10)

- Маркер интерактивного челленджа: iframe bframe, контейнер которого не стоит
  за экраном (top: -10000px); click_and_race ждёт видимости, а не появления в DOM.
- Маркер наличия капчи берётся из исходного HTML (api.js / enterprise.js,
  .g-recaptcha, iframe чекбокса), проверка мгновенная, без ожидания iframe.
- SolverReCaptcha ждёт detect_locator в DOM, а не видимости (script невидим).
- test_main.http: секреты вынесены в http-client.private.env.json, запрос
  на стенд zennolab, исправлены XPath с @class.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
protokeyandClaude Opus 5.5 committed 2026-10-14 00:30:29 +04:00
1 parent fdee12e2d8
commit 4d90dc4a21
7 files changed
+67 -19

No files matched your search

+3 -1
View File
@@ -23,8 +23,10 @@ async def click_and_race(page, element, challenge_locator, timeout=30_000):
timeout=timeout,
)
)
# challenge_locator должен совпадать только с открытым окном челленджа: элементы челленджа могут быть в DOM
# заранее (reCAPTCHA держит их за экраном), поэтому ждём видимости, а не появления
challenge_task = asyncio.create_task(
challenge_locator.wait_for(state="attached", timeout=timeout)
challenge_locator.first.wait_for(state="visible", timeout=timeout)
)
await element.click()