cap_psyho
This commit is contained in:
1 parent
6959670729
commit
87b8bbb075
2 files changed
+28
-27
No files matched your search
@@ -218,7 +218,7 @@ try:
|
|||||||
sitekey = await turnstile_element.get_attribute('data-sitekey')
|
sitekey = await turnstile_element.get_attribute('data-sitekey')
|
||||||
turnstile_frame = await page.query_selector('iframe[src*="turnstile"]')
|
turnstile_frame = await page.query_selector('iframe[src*="turnstile"]')
|
||||||
if turnstile_frame and sitekey:
|
if turnstile_frame and sitekey:
|
||||||
captcha_type = "TurnstileTask"
|
captcha_type = "AntiTurnstileTaskProxyLess"
|
||||||
|
|
||||||
if not sitekey or not captcha_type:
|
if not sitekey or not captcha_type:
|
||||||
return ActionResult(
|
return ActionResult(
|
||||||
@@ -319,7 +319,7 @@ try:
|
|||||||
include_in_memory=True
|
include_in_memory=True
|
||||||
)
|
)
|
||||||
|
|
||||||
elif captcha_type == "TurnstileTask":
|
elif captcha_type == "AntiTurnstileTaskProxyLess":
|
||||||
token = solution.get("token")
|
token = solution.get("token")
|
||||||
if token:
|
if token:
|
||||||
await page.evaluate(f'''(token) => {{
|
await page.evaluate(f'''(token) => {{
|
||||||
@@ -438,7 +438,7 @@ async def solve_captcha_with_capsolver(page, capsolver_api_key: str) -> bool:
|
|||||||
if sitekey:
|
if sitekey:
|
||||||
turnstile_frame = await page.query_selector('iframe[src*="turnstile"]')
|
turnstile_frame = await page.query_selector('iframe[src*="turnstile"]')
|
||||||
if turnstile_frame:
|
if turnstile_frame:
|
||||||
captcha_type = "TurnstileTask"
|
captcha_type = "AntiTurnstileTaskProxyLess"
|
||||||
|
|
||||||
if not sitekey or not captcha_type:
|
if not sitekey or not captcha_type:
|
||||||
logger.info("No captcha found on page")
|
logger.info("No captcha found on page")
|
||||||
@@ -507,7 +507,7 @@ async def solve_captcha_with_capsolver(page, capsolver_api_key: str) -> bool:
|
|||||||
await textarea.fill(h_captcha_response)
|
await textarea.fill(h_captcha_response)
|
||||||
logger.info("hCaptcha solved successfully!")
|
logger.info("hCaptcha solved successfully!")
|
||||||
return True
|
return True
|
||||||
elif captcha_type == "TurnstileTask":
|
elif captcha_type == "AntiTurnstileTaskProxyLess":
|
||||||
token = solution.get("token")
|
token = solution.get("token")
|
||||||
if token:
|
if token:
|
||||||
# Вставляем токен
|
# Вставляем токен
|
||||||
@@ -947,29 +947,28 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
|
|||||||
logger.info(f"[{task_id}] Using new Chrome on internal port {CHROME_INTERNAL_PORT}")
|
logger.info(f"[{task_id}] Using new Chrome on internal port {CHROME_INTERNAL_PORT}")
|
||||||
|
|
||||||
# Инжектируем stealth-скрипты через CDP для дополнительной защиты
|
# Инжектируем stealth-скрипты через CDP для дополнительной защиты
|
||||||
# Отключено: stealth-скрипты вызывают ошибки и ломают Cloudflare Turnstile
|
try:
|
||||||
# try:
|
import json
|
||||||
# import json
|
stealth_script_path = "/app/stealth-extension/stealth.js"
|
||||||
# stealth_script_path = "/app/stealth-extension/stealth.js"
|
if os.path.exists(stealth_script_path):
|
||||||
# if os.path.exists(stealth_script_path):
|
with open(stealth_script_path, 'r') as f:
|
||||||
# with open(stealth_script_path, 'r') as f:
|
stealth_js = f.read()
|
||||||
# stealth_js = f.read()
|
|
||||||
#
|
# Получаем список целей (вкладок) через CDP
|
||||||
# # Получаем список целей (вкладок) через CDP
|
response = urllib.request.urlopen(f"{cdp_url}/json/list", timeout=5)
|
||||||
# response = urllib.request.urlopen(f"{cdp_url}/json/list", timeout=5)
|
targets = json.loads(response.read().decode())
|
||||||
# targets = json.loads(response.read().decode())
|
|
||||||
#
|
for target in targets:
|
||||||
# for target in targets:
|
if target.get('type') == 'page':
|
||||||
# if target.get('type') == 'page':
|
ws_url = target.get('webSocketDebuggerUrl')
|
||||||
# ws_url = target.get('webSocketDebuggerUrl')
|
if ws_url:
|
||||||
# if ws_url:
|
logger.info(f"[{task_id}] Injecting stealth scripts via CDP into {target.get('url', 'unknown')}")
|
||||||
# logger.info(f"[{task_id}] Injecting stealth scripts via CDP into {target.get('url', 'unknown')}")
|
|
||||||
#
|
logger.info(f"[{task_id}] Stealth extension loaded + CDP stealth injection ready")
|
||||||
# logger.info(f"[{task_id}] Stealth extension loaded + CDP stealth injection ready")
|
else:
|
||||||
# else:
|
logger.warning(f"[{task_id}] Stealth script not found at {stealth_script_path}")
|
||||||
# logger.warning(f"[{task_id}] Stealth script not found at {stealth_script_path}")
|
except Exception as e:
|
||||||
# except Exception as e:
|
logger.warning(f"[{task_id}] CDP stealth injection failed (extension should still work): {e}")
|
||||||
# logger.warning(f"[{task_id}] CDP stealth injection failed (extension should still work): {e}")
|
|
||||||
|
|
||||||
# Подключаемся через CDP
|
# Подключаемся через CDP
|
||||||
browser = Browser(cdp_url=cdp_url)
|
browser = Browser(cdp_url=cdp_url)
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ services:
|
|||||||
# CapSolver для автоматического решения капчи (Turnstile, reCAPTCHA, hCaptcha)
|
# CapSolver для автоматического решения капчи (Turnstile, reCAPTCHA, hCaptcha)
|
||||||
- CAPSOLVER_API_KEY=${CAPSOLVER_API_KEY:-}
|
- CAPSOLVER_API_KEY=${CAPSOLVER_API_KEY:-}
|
||||||
- AUTO_SOLVE_CAPTCHA=${AUTO_SOLVE_CAPTCHA:-false}
|
- AUTO_SOLVE_CAPTCHA=${AUTO_SOLVE_CAPTCHA:-false}
|
||||||
|
# ВАЖНО! Прокси обязательна для Turnstile! Без прокси Cloudflare детектит бота
|
||||||
|
- PROXY_URL=${PROXY_URL:-}
|
||||||
volumes:
|
volumes:
|
||||||
- /home/nafer/dokploy_data/browser-use:/app/browser-data
|
- /home/nafer/dokploy_data/browser-use:/app/browser-data
|
||||||
shm_size: '4gb'
|
shm_size: '4gb'
|
||||||
|
|||||||
Reference in new issue
Block a user