коротко о главном
Мы не используем поиск картинки
мы используем стили элемента которые лежат в не фрейма
код просто не нужно указывать что искать
вставили выполнили он сам все найдет и тыкнет
если у кого не работает то возможно нужно подогнать
но я работаю с разными сайтами где есть Cloudflare и 10 из 10
код написан на скорую руку возможно нужны доработки под каждого индивидуально
но даренному коню в зубы не смотрят
Мы не используем поиск картинки
мы используем стили элемента которые лежат в не фрейма
код просто не нужно указывать что искать
вставили выполнили он сам все найдет и тыкнет
если у кого не работает то возможно нужно подогнать
но я работаю с разными сайтами где есть Cloudflare и 10 из 10
код написан на скорую руку возможно нужны доработки под каждого индивидуально
но даренному коню в зубы не смотрят
C#:
project.SendInfoToLog("=== ПОИСК КООРДИНАТ TURNSTILE И НАВЕДЕНИЕ МЫШИ ===");
// Поиск Turnstile виджета по динамическому ID
project.SendInfoToLog("Поиск Turnstile виджета...");
HtmlElement turnstileWidget = instance.ActiveTab.FindElementByXPath("//div[contains(@id, 'cf-turnstile-')]", 0);
if (!turnstileWidget.IsVoid)
{
string widgetId = turnstileWidget.GetAttribute("id");
string widgetLeft = turnstileWidget.GetAttribute("leftInbrowser");
string widgetTop = turnstileWidget.GetAttribute("topInbrowser");
project.SendInfoToLog($"✓ TURNSTILE WIDGET НАЙДЕН: ID='{widgetId}'");
project.SendInfoToLog($"- Координаты виджета: X='{widgetLeft}', Y='{widgetTop}'");
if (int.TryParse(widgetLeft, out int widgetX) && int.TryParse(widgetTop, out int widgetY))
{
// Координаты для клика по центру виджета
int clickX = widgetX + 50;
int clickY = widgetY + 25;
project.SendInfoToLog($"✓ ВЕРНЫЕ КООРДИНАТЫ ДЛЯ КЛИКА: X={widgetX}, Y={widgetY}");
project.SendInfoToLog($"- Используйте: instance.ActiveTab.FullEmulationMouseMove({clickX}, {clickY})");
// НАВЕДЕНИЕ МЫШКИ
project.SendInfoToLog("Наведение мышки...");
instance.ActiveTab.FullEmulationMouseMove(clickX, clickY);
project.SendInfoToLog("✓ Мышь наведена");
// Задержка перед кликом
System.Threading.Thread.Sleep(1000);
// КЛИК
project.SendInfoToLog("Клик левой кнопкой мыши...");
instance.ActiveTab.FullEmulationMouseClick("left", "click");
project.SendInfoToLog("✓ Клик выполнен");
// ОЖИДАНИЕ РЕЗУЛЬТАТА
project.SendInfoToLog("Ожидание решения Turnstile...");
System.Threading.Thread.Sleep(5000);
// ПРОВЕРКА ТОКЕНА
project.SendInfoToLog("Проверка токена...");
HtmlElement tokenField = instance.ActiveTab.FindElementByName("cf-turnstile-response");
if (!tokenField.IsVoid)
{
string tokenValue = tokenField.GetAttribute("value");
if (!string.IsNullOrEmpty(tokenValue))
{
project.SendInfoToLog($"✓ УСПЕХ: Токен получен!");
project.SendInfoToLog($"Токен: {tokenValue.Substring(0, Math.Min(30, tokenValue.Length))}...");
}
else
{
project.SendInfoToLog("Токен еще не получен");
}
}
else
{
project.SendInfoToLog("Поле для токена не найдено");
}
}
else
{
project.SendInfoToLog("✗ Ошибка преобразования координат");
}
}
else
{
project.SendInfoToLog("✗ Turnstile виджет не найден");
}
project.SendInfoToLog("=== ОПЕРАЦИЯ ЗАВЕРШЕНА ===");




