cap7
This commit is contained in:
1 parent
7625b3a9ad
commit
729ada2a6f
2 files changed
+51
-3
No files matched your search
@@ -5,6 +5,8 @@ FROM mcr.microsoft.com/playwright/python:v1.49.0-noble
|
|||||||
# Видеокодеки и мультимедийные библиотеки для воспроизведения видео в Chrome
|
# Видеокодеки и мультимедийные библиотеки для воспроизведения видео в Chrome
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
socat \
|
socat \
|
||||||
|
wget \
|
||||||
|
unzip \
|
||||||
libgstreamer1.0-0 \
|
libgstreamer1.0-0 \
|
||||||
gstreamer1.0-plugins-base \
|
gstreamer1.0-plugins-base \
|
||||||
gstreamer1.0-plugins-good \
|
gstreamer1.0-plugins-good \
|
||||||
@@ -49,6 +51,11 @@ COPY app.py .
|
|||||||
# Создаем директорию для данных браузера
|
# Создаем директорию для данных браузера
|
||||||
RUN mkdir -p /app/browser-data && chmod 777 /app/browser-data
|
RUN mkdir -p /app/browser-data && chmod 777 /app/browser-data
|
||||||
|
|
||||||
|
# Скачиваем и распаковываем CapSolver расширение для автоматического решения капчи
|
||||||
|
RUN wget -q https://github.com/capsolver/capsolver-browser-extension/releases/download/v.1.17.0/capsolver-extension.zip -O /tmp/capsolver.zip && \
|
||||||
|
unzip -q /tmp/capsolver.zip -d /app/capsolver-extension && \
|
||||||
|
rm /tmp/capsolver.zip
|
||||||
|
|
||||||
EXPOSE 8383
|
EXPOSE 8383
|
||||||
EXPOSE 9222
|
EXPOSE 9222
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,24 @@ logger.info(f"RECAPTCHA_BYPASS: {RECAPTCHA_BYPASS}")
|
|||||||
logger.info(f"AUTO_SOLVE_CAPTCHA: {AUTO_SOLVE_CAPTCHA}")
|
logger.info(f"AUTO_SOLVE_CAPTCHA: {AUTO_SOLVE_CAPTCHA}")
|
||||||
logger.info(f"===========================")
|
logger.info(f"===========================")
|
||||||
|
|
||||||
|
# Настраиваем CapSolver расширение с API ключом
|
||||||
|
if CAPSOLVER_API_KEY:
|
||||||
|
capsolver_config_path = "/app/capsolver-extension/assets/config.js"
|
||||||
|
if os.path.exists(capsolver_config_path):
|
||||||
|
try:
|
||||||
|
with open(capsolver_config_path, 'r') as f:
|
||||||
|
config_content = f.read()
|
||||||
|
# Заменяем apiKey на реальный
|
||||||
|
import re
|
||||||
|
config_content = re.sub(r'apiKey:\s*"[^"]*"', f'apiKey: "{CAPSOLVER_API_KEY}"', config_content)
|
||||||
|
with open(capsolver_config_path, 'w') as f:
|
||||||
|
f.write(config_content)
|
||||||
|
logger.info("CapSolver API key configured in extension")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Failed to configure CapSolver API key: {e}")
|
||||||
|
else:
|
||||||
|
logger.warning(f"CapSolver config not found at {capsolver_config_path}")
|
||||||
|
|
||||||
# Создаём Tools с кастомными действиями
|
# Создаём Tools с кастомными действиями
|
||||||
try:
|
try:
|
||||||
from browser_use import Tools, BrowserSession
|
from browser_use import Tools, BrowserSession
|
||||||
@@ -830,11 +848,20 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
|
|||||||
"--enable-webgpu",
|
"--enable-webgpu",
|
||||||
"--enable-webgpu-developer-features",
|
"--enable-webgpu-developer-features",
|
||||||
"--use-angle=swiftshader",
|
"--use-angle=swiftshader",
|
||||||
# Отключено: stealth-расширение вызывает ошибки и ломает Cloudflare Turnstile
|
|
||||||
# "--load-extension=/app/stealth-extension",
|
|
||||||
# "--disable-extensions-except=/app/stealth-extension",
|
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# Добавляем расширение CapSolver для автоматического решения капчи
|
||||||
|
if AUTO_SOLVE_CAPTCHA and CAPSOLVER_API_KEY:
|
||||||
|
capsolver_ext_path = "/app/capsolver-extension"
|
||||||
|
if os.path.exists(capsolver_ext_path):
|
||||||
|
chrome_cmd.extend([
|
||||||
|
f"--disable-extensions-except={capsolver_ext_path}",
|
||||||
|
f"--load-extension={capsolver_ext_path}",
|
||||||
|
])
|
||||||
|
logger.info(f"[{task_id}] CapSolver extension enabled")
|
||||||
|
else:
|
||||||
|
logger.warning(f"[{task_id}] CapSolver extension not found at {capsolver_ext_path}")
|
||||||
|
|
||||||
# Добавляем специальные флаги для обхода reCAPTCHA если включено
|
# Добавляем специальные флаги для обхода reCAPTCHA если включено
|
||||||
if RECAPTCHA_BYPASS:
|
if RECAPTCHA_BYPASS:
|
||||||
chrome_cmd.extend([
|
chrome_cmd.extend([
|
||||||
@@ -848,6 +875,14 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
|
|||||||
"--disable-ipc-flooding-protection",
|
"--disable-ipc-flooding-protection",
|
||||||
])
|
])
|
||||||
logger.info(f"[{task_id}] Added reCAPTCHA bypass flags")
|
logger.info(f"[{task_id}] Added reCAPTCHA bypass flags")
|
||||||
|
else:
|
||||||
|
# Всегда добавляем --no-sandbox для работы в контейнере
|
||||||
|
# и --disable-blink-features=AutomationControlled для обхода Cloudflare Turnstile
|
||||||
|
chrome_cmd.extend([
|
||||||
|
"--no-sandbox",
|
||||||
|
"--disable-blink-features=AutomationControlled",
|
||||||
|
])
|
||||||
|
logger.info(f"[{task_id}] Added minimal stealth flags for Cloudflare Turnstile")
|
||||||
|
|
||||||
# Добавляем прокси если есть
|
# Добавляем прокси если есть
|
||||||
chrome_cmd.extend(proxy_args)
|
chrome_cmd.extend(proxy_args)
|
||||||
@@ -941,11 +976,17 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str):
|
|||||||
browser = Browser(cdp_url=cdp_url)
|
browser = Browser(cdp_url=cdp_url)
|
||||||
else:
|
else:
|
||||||
# Обычный запуск
|
# Обычный запуск
|
||||||
|
# Всегда добавляем флаги для обхода Cloudflare Turnstile
|
||||||
|
extra_chromium_args = [
|
||||||
|
"--no-sandbox",
|
||||||
|
"--disable-blink-features=AutomationControlled",
|
||||||
|
]
|
||||||
browser_profile = BrowserProfile(
|
browser_profile = BrowserProfile(
|
||||||
user_data_dir="/app/browser-data/main_profile",
|
user_data_dir="/app/browser-data/main_profile",
|
||||||
profile_directory="Default",
|
profile_directory="Default",
|
||||||
headless=False, # Всегда false для поддержки reCAPTCHA
|
headless=False, # Всегда false для поддержки reCAPTCHA
|
||||||
keep_alive=True,
|
keep_alive=True,
|
||||||
|
extra_chromium_args=extra_chromium_args,
|
||||||
)
|
)
|
||||||
browser = Browser(browser_profile=browser_profile)
|
browser = Browser(browser_profile=browser_profile)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user