feature!: добавлен механизм обхода антибот защиты
This commit is contained in:
1 parent
f5871710ab
commit
1d2fdeae70
17 files changed
+735
-16
No files matched your search
+34
-13
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user