feature!: добавлен механизм обхода антибот защиты

This commit is contained in:
protokey committed 2026-09-17 15:49:12 +04:00
1 parent f5871710ab
commit 1d2fdeae70
17 files changed
+735 -16

No files matched your search

+34 -13
View File
@@ -1,5 +1,6 @@
import json
import logging
import traceback
import uuid
from pathlib import Path
from typing import Annotated
@@ -16,6 +17,7 @@ from playwright.async_api import ProxySettings
from ua_parser import user_agent_parser
import captcha
from antibot.orchestrator import pass_challenges
from engine import actions
from engine.schemas import SolveRequest
@@ -109,16 +111,16 @@ async def solve(
config = load_or_create_identity(user_data_dir, user_agent=payload.user_agent)
ctx_opts = {**config["context_options"], "config": config["config"]}
if payload.captcha:
# "dl.formRow:nth-child(3) > dd:nth-child(2) > div:nth-child(1)"
# hcaptcha
# rucaptcha api_key
captcha_solver = captcha.load_captcha(
payload.captcha,
payload.captcha_type
)
else:
captcha_solver = None
# if payload.captcha:
# # "dl.formRow:nth-child(3) > dd:nth-child(2) > div:nth-child(1)"
# # hcaptcha
# # rucaptcha api_key
# captcha_solver = captcha.load_captcha(
# payload.captcha,
# payload.captcha_type
# )
# else:
# captcha_solver = None
async with AsyncCamoufox(
persistent_context=True,
@@ -127,16 +129,35 @@ async def solve(
window=scr_size,
i_know_what_im_doing=True,
geoip=True,
humanize=True,
**ctx_opts,
) as camoufo:
await camoufo.add_init_script(config["init_script"])
page = camoufo.pages[0] if camoufo.pages else await camoufo.new_page()
if payload.cookies:
await camoufo.add_cookies(payload.cookies)
page.set_default_timeout(30_000)
page.set_default_navigation_timeout(60_000)
await page.goto(url=payload.url)
# if captcha_solver:
# assert payload.captcha_selector
# await captcha_solver.solve(payload.captcha_selector, page)
try:
await pass_challenges(
payload.captcha_type, page,
captcha=payload.captcha, success_locator=payload.captcha_success_selector
)
except Exception:
result = {
"status": "err",
"user_agent": ctx_opts["user_agent"],
"cookies": None,
"actions": [],
"error": traceback.format_exc(),
}
return result
actions_result = await actions.execute(page, payload.actions, payload.captcha)
# test: is captcha present?
status = not "error" in actions_result[-1]
error = ["Something error", None][status]
cookies = await camoufo.cookies()