Cloudflare поиск координат через стили и клик по ним

fasawer

Client
Регистрация
19.11.2025
Сообщения
5
Благодарностей
0
Баллы
1
коротко о главном
Мы не используем поиск картинки
мы используем стили элемента которые лежат в не фрейма
код просто не нужно указывать что искать
вставили выполнили он сам все найдет и тыкнет
если у кого не работает то возможно нужно подогнать
но я работаю с разными сайтами где есть 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("=== ОПЕРАЦИЯ ЗАВЕРШЕНА ===");
 

fasawer

Client
Регистрация
19.11.2025
Сообщения
5
Благодарностей
0
Баллы
1
второй код предназначен дл\ таких вариантов

таких сайтов не очень много так же возможно подгонять под свой
ну или возможно кто то сделает его еще лучше главное направление
возможно и это кому то поможет
137610


C#:
project.SendInfoToLog("=== ПОИСК С ПРОВЕРКОЙ ПОЛЯ ===");

HtmlElement targetContainer = null;
string foundContainerId = "";

// Получаем все элементы с ID
project.SendInfoToLog("Поиск всех элементов с ID...");
HtmlElementCollection allElements = instance.ActiveTab.FindElementsByTags("*");

// Список для хранения элементов с ID
var elementsWithId = new List<HtmlElement>();

// Собираем все элементы с ID
for (int i = 0; i < allElements.Count; i++)
{
    HtmlElement element = allElements.GetByNumber(i);
    string elementId = element.GetAttribute("id");
    
    if (!string.IsNullOrEmpty(elementId))
    {
        elementsWithId.Add(element);
    }
}

project.SendInfoToLog($"Найдено элементов с ID: {elementsWithId.Count}");

// Проверяем каждый элемент с ID на наличие поля cf-turnstile-response
foreach (HtmlElement element in elementsWithId)
{
    string elementId = element.GetAttribute("id");
    string elementTag = element.TagName;
    
    project.SendInfoToLog($"Проверка элемента: ID='{elementId}', Tag='{elementTag}'");
    
    // Ищем внутри элемента поле с name='cf-turnstile-response'
    HtmlElement tokenField = element.FindChildByName("cf-turnstile-response");
    
    if (!tokenField.IsVoid)
    {
        targetContainer = element;
        foundContainerId = elementId;
        project.SendInfoToLog($"✓ НАЙДЕН КОНТЕЙНЕР С ПОЛЕМ ТОКЕНА: ID='{elementId}'");
        break;
    }
}

// Если нашли контейнер - работаем с ним
if (targetContainer != null && !targetContainer.IsVoid)
{
    project.SendInfoToLog($"✓ РАБОТАЕМ С КОНТЕЙНЕРОМ: ID='{foundContainerId}'");
    
    // Получаем координаты контейнера
    string leftInBrowser = targetContainer.GetAttribute("leftInbrowser");
    string topInBrowser = targetContainer.GetAttribute("topInbrowser");
    
    project.SendInfoToLog($"- Координаты контейнера: X='{leftInBrowser}', Y='{topInBrowser}'");
    
    // Получаем размеры контейнера
    string width = targetContainer.GetAttribute("offsetWidth");
    string height = targetContainer.GetAttribute("offsetHeight");
    project.SendInfoToLog($"- Размеры контейнера: Width='{width}', Height='{height}'");
    
    if (int.TryParse(leftInBrowser, out int containerX) && int.TryParse(topInBrowser, out int containerY))
    {
        // Рассчитываем координаты для клика
        int clickX, clickY;
        
        // Если есть размеры - кликаем по центру
        if (int.TryParse(width, out int w) && int.TryParse(height, out int h) && w > 0 && h > 0)
        {
            clickX = containerX + (w / 2);
            clickY = containerY + (h / 2);
            project.SendInfoToLog($"- Клик по центру: X={clickX}, Y={clickY} (ширина={w}, высота={h})");
        }
        else
        {
            // Стандартное смещение
            clickX = containerX + 25;
            clickY = containerY + 25;
            project.SendInfoToLog($"- Клик со смещением: X={clickX}, Y={clickY}");
        }
        
        // Проверяем что координаты не (0,0)
        if (containerX == 0 && containerY == 0)
        {
            project.SendInfoToLog("⚠ ВНИМАНИЕ: Координаты контейнера (0,0) - контейнер может быть скрыт");
            project.SendInfoToLog("Ищем родительский видимый элемент...");
            
            // Ищем родительский элемент с координатами
            HtmlElement parent = targetContainer.ParentElement;
            int level = 0;
            
            while (!parent.IsVoid && level < 5) // Проверяем до 5 уровней родителей
            {
                string parentLeft = parent.GetAttribute("leftInbrowser");
                string parentTop = parent.GetAttribute("topInbrowser");
                
                if (int.TryParse(parentLeft, out int parentX) && int.TryParse(parentTop, out int parentY) &&
                    (parentX != 0 || parentY != 0))
                {
                    project.SendInfoToLog($"Найден родитель с координатами: X={parentX}, Y={parentY}");
                    clickX = parentX + 50;
                    clickY = parentY + 25;
                    project.SendInfoToLog($"- Новые координаты для клика: X={clickX}, Y={clickY}");
                    break;
                }
                
                parent = parent.ParentElement;
                level++;
            }
        }
        
        // НАВЕДЕНИЕ И КЛИК
        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);
        
        // ПРОВЕРКА РЕЗУЛЬТАТА
        CheckTurnstileToken();
    }
    else
    {
        project.SendInfoToLog("✗ Ошибка преобразования координат");
    }
}
else
{
    project.SendInfoToLog("✗ Контейнер с полем cf-turnstile-response не найден");
    
    // ВЫВОД ОТЛАДОЧНОЙ ИНФОРМАЦИИ
    project.SendInfoToLog("=== ОТЛАДОЧНАЯ ИНФОРМАЦИЯ ===");
    
    // Выводим первые 20 элементов с ID
    project.SendInfoToLog("Первые 20 элементов с ID:");
    for (int i = 0; i < Math.Min(elementsWithId.Count, 20); i++)
    {
        HtmlElement element = elementsWithId[i];
        string elementId = element.GetAttribute("id");
        string elementTag = element.TagName;
        string elementClass = element.GetAttribute("class");
        
        project.SendInfoToLog($"Elem[{i}]: ID='{elementId}', Tag='{elementTag}', Class='{elementClass}'");
    }
    
    // Проверяем есть ли поле cf-turnstile-response вообще на странице
    project.SendInfoToLog("Поиск поля cf-turnstile-response на странице...");
    HtmlElement tokenFieldGlobal = instance.ActiveTab.FindElementByName("cf-turnstile-response");
    project.SendInfoToLog($"Поле cf-turnstile-response: IsVoid={tokenFieldGlobal.IsVoid}");
    
    if (!tokenFieldGlobal.IsVoid)
    {
        string tokenId = tokenFieldGlobal.GetAttribute("id");
        string tokenParentId = tokenFieldGlobal.ParentElement?.GetAttribute("id") ?? "нет ID";
        project.SendInfoToLog($"Поле найдено: ID='{tokenId}', Родитель ID='{tokenParentId}'");
    }
}

// ФУНКЦИЯ ПРОВЕРКИ ТОКЕНА
void CheckTurnstileToken()
{
    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("Токен еще не получен");
            
            // Дополнительное ожидание
            for (int i = 1; i <= 3; i++)
            {
                System.Threading.Thread.Sleep(2000);
                tokenValue = tokenField.GetAttribute("value");
                
                if (!string.IsNullOrEmpty(tokenValue))
                {
                    project.SendInfoToLog($"✓ Токен получен после дополнительного ожидания!");
                    project.SendInfoToLog($"Токен: {tokenValue.Substring(0, Math.Min(30, tokenValue.Length))}...");
                    return;
                }
            }
            project.SendInfoToLog("Токен не получен после 10 секунд ожидания");
        }
    }
    else
    {
        project.SendInfoToLog("Поле токена не найдено");
    }
}

project.SendInfoToLog("=== ОПЕРАЦИЯ ЗАВЕРШЕНА ===");
 

fasawer

Client
Регистрация
19.11.2025
Сообщения
5
Благодарностей
0
Баллы
1
для тех кому надо и то и другое в одном коде
сначала выполняем первы вариант если его не найдено то пробуем второй вариант


C#:
project.SendInfoToLog("=== ЕДИНЫЙ ПОИСК TURNSTILE ===");

bool turnstileFound = false;

// МЕТОД 1: Поиск Turnstile виджета по динамическому ID
project.SendInfoToLog("=== МЕТОД 1: ПОИСК ПО ДИНАМИЧЕСКОМУ ID ===");
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 + 30;
        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);
        
        // ПРОВЕРКА ТОКЕНА
        CheckTurnstileToken();
        
        turnstileFound = true;
    }
    else
    {
        project.SendInfoToLog("✗ Ошибка преобразования координат");
    }
}
else
{
    project.SendInfoToLog("✗ Turnstile виджет не найден по динамическому ID");
}

// ЕСЛИ ПЕРВЫЙ МЕТОД НЕ СРАБОТАЛ - ЗАПУСКАЕМ ВТОРОЙ МЕТОД
if (!turnstileFound)
{
    project.SendInfoToLog("=== МЕТОД 2: ПОИСК С ПРОВЕРКОЙ ПОЛЯ ===");
    
    HtmlElement targetContainer = null;
    string foundContainerId = "";
    
    // Получаем все элементы с ID
    project.SendInfoToLog("Поиск всех элементов с ID...");
    HtmlElementCollection allElements = instance.ActiveTab.FindElementsByTags("*");
    
    // Список для хранения элементов с ID
    var elementsWithId = new List<HtmlElement>();
    
    // Собираем все элементы с ID
    for (int i = 0; i < allElements.Count; i++)
    {
        HtmlElement element = allElements.GetByNumber(i);
        string elementId = element.GetAttribute("id");
        
        if (!string.IsNullOrEmpty(elementId))
        {
            elementsWithId.Add(element);
        }
    }
    
    project.SendInfoToLog($"Найдено элементов с ID: {elementsWithId.Count}");
    
    // Проверяем каждый элемент с ID на наличие поля cf-turnstile-response
    foreach (HtmlElement element in elementsWithId)
    {
        string elementId = element.GetAttribute("id");
        string elementTag = element.TagName;
        
        project.SendInfoToLog($"Проверка элемента: ID='{elementId}', Tag='{elementTag}'");
        
        // Ищем внутри элемента поле с name='cf-turnstile-response'
        HtmlElement tokenField = element.FindChildByName("cf-turnstile-response");
        
        if (!tokenField.IsVoid)
        {
            targetContainer = element;
            foundContainerId = elementId;
            project.SendInfoToLog($"✓ НАЙДЕН КОНТЕЙНЕР С ПОЛЕМ ТОКЕНА: ID='{elementId}'");
            break;
        }
    }
    
    // Если нашли контейнер - работаем с ним
    if (targetContainer != null && !targetContainer.IsVoid)
    {
        project.SendInfoToLog($"✓ РАБОТАЕМ С КОНТЕЙНЕРОМ: ID='{foundContainerId}'");
        
        // Получаем координаты контейнера
        string leftInBrowser = targetContainer.GetAttribute("leftInbrowser");
        string topInBrowser = targetContainer.GetAttribute("topInbrowser");
        
        project.SendInfoToLog($"- Координаты контейнера: X='{leftInBrowser}', Y='{topInBrowser}'");
        
        // Получаем размеры контейнера
        string width = targetContainer.GetAttribute("offsetWidth");
        string height = targetContainer.GetAttribute("offsetHeight");
        project.SendInfoToLog($"- Размеры контейнера: Width='{width}', Height='{height}'");
        
        if (int.TryParse(leftInBrowser, out int containerX) && int.TryParse(topInBrowser, out int containerY))
        {
            // Рассчитываем координаты для клика
            int clickX, clickY;
            
            // Если есть размеры - кликаем по центру
            if (int.TryParse(width, out int w) && int.TryParse(height, out int h) && w > 0 && h > 0)
            {
                clickX = containerX + (w / 2);
                clickY = containerY + (h / 2);
                project.SendInfoToLog($"- Клик по центру: X={clickX}, Y={clickY} (ширина={w}, высота={h})");
            }
            else
            {
                // Стандартное смещение
                clickX = containerX + 25;
                clickY = containerY + 25;
                project.SendInfoToLog($"- Клик со смещением: X={clickX}, Y={clickY}");
            }
            
            // Проверяем что координаты не (0,0)
            if (containerX == 0 && containerY == 0)
            {
                project.SendInfoToLog("⚠ ВНИМАНИЕ: Координаты контейнера (0,0) - контейнер может быть скрыт");
                project.SendInfoToLog("Ищем родительский видимый элемент...");
                
                // Ищем родительский элемент с координатами
                HtmlElement parent = targetContainer.ParentElement;
                int level = 0;
                
                while (!parent.IsVoid && level < 5) // Проверяем до 5 уровней родителей
                {
                    string parentLeft = parent.GetAttribute("leftInbrowser");
                    string parentTop = parent.GetAttribute("topInbrowser");
                    
                    if (int.TryParse(parentLeft, out int parentX) && int.TryParse(parentTop, out int parentY) &&
                        (parentX != 0 || parentY != 0))
                    {
                        project.SendInfoToLog($"Найден родитель с координатами: X={parentX}, Y={parentY}");
                        clickX = parentX + 50;
                        clickY = parentY + 25;
                        project.SendInfoToLog($"- Новые координаты для клика: X={clickX}, Y={clickY}");
                        break;
                    }
                    
                    parent = parent.ParentElement;
                    level++;
                }
            }
            
            // НАВЕДЕНИЕ И КЛИК
            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);
            
            // ПРОВЕРКА РЕЗУЛЬТАТА
            CheckTurnstileToken();
            
            turnstileFound = true;
        }
        else
        {
            project.SendInfoToLog("✗ Ошибка преобразования координат");
        }
    }
    else
    {
        project.SendInfoToLog("✗ Контейнер с полем cf-turnstile-response не найден");
        
        // ВЫВОД ОТЛАДОЧНОЙ ИНФОРМАЦИИ
        project.SendInfoToLog("=== ОТЛАДОЧНАЯ ИНФОРМАЦИЯ ===");
        
        // Выводим первые 20 элементов с ID
        project.SendInfoToLog("Первые 20 элементов с ID:");
        for (int i = 0; i < Math.Min(elementsWithId.Count, 20); i++)
        {
            HtmlElement element = elementsWithId[i];
            string elementId = element.GetAttribute("id");
            string elementTag = element.TagName;
            string elementClass = element.GetAttribute("class");
            
            project.SendInfoToLog($"Elem[{i}]: ID='{elementId}', Tag='{elementTag}', Class='{elementClass}'");
        }
        
        // Проверяем есть ли поле cf-turnstile-response вообще на странице
        project.SendInfoToLog("Поиск поля cf-turnstile-response на странице...");
        HtmlElement tokenFieldGlobal = instance.ActiveTab.FindElementByName("cf-turnstile-response");
        project.SendInfoToLog($"Поле cf-turnstile-response: IsVoid={tokenFieldGlobal.IsVoid}");
        
        if (!tokenFieldGlobal.IsVoid)
        {
            string tokenId = tokenFieldGlobal.GetAttribute("id");
            string tokenParentId = tokenFieldGlobal.ParentElement?.GetAttribute("id") ?? "нет ID";
            project.SendInfoToLog($"Поле найдено: ID='{tokenId}', Родитель ID='{tokenParentId}'");
        }
    }
}

// ФУНКЦИЯ ПРОВЕРКИ ТОКЕНА
void CheckTurnstileToken()
{
    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("Токен еще не получен");
            
            // Дополнительное ожидание
            for (int i = 1; i <= 3; i++)
            {
                System.Threading.Thread.Sleep(2000);
                tokenValue = tokenField.GetAttribute("value");
                
                if (!string.IsNullOrEmpty(tokenValue))
                {
                    project.SendInfoToLog($"✓ Токен получен после дополнительного ожидания!");
                    project.SendInfoToLog($"Токен: {tokenValue.Substring(0, Math.Min(30, tokenValue.Length))}...");
                    return;
                }
            }
            project.SendInfoToLog("Токен не получен после 10 секунд ожидания");
        }
    }
    else
    {
        project.SendInfoToLog("Поле токена не найдено");
    }
}

if (turnstileFound)
{
    project.SendInfoToLog("✓ Turnstile успешно обработан");
}
else
{
    project.SendInfoToLog("✗ Turnstile не найден ни одним методом");
}

project.SendInfoToLog("=== ОПЕРАЦИЯ ЗАВЕРШЕНА ===");
 

myst87

Client
Регистрация
28.12.2019
Сообщения
1
Благодарностей
0
Баллы
1
Не находит((( Кликает в левый угл экрана((((
 

fasawer

Client
Регистрация
19.11.2025
Сообщения
5
Благодарностей
0
Баллы
1
сайт нужно посмотреть так ак у меня динамические id напиши в лс
 

fasawer

Client
Регистрация
19.11.2025
Сообщения
5
Благодарностей
0
Баллы
1

kagorec

Client
Регистрация
24.08.2013
Сообщения
1 089
Благодарностей
600
Баллы
113
Это выгладит как повтор темы @kul0n и принципа работы клика по каптче как в прошлом конкурсе.
Там такая же суть, фокус на около прилегающий элемент по xpath и потом клик по смещению
C#:
if (int.Parse(project.Variables["cnt"].Value) < 7)
{
    project.SendInfoToLog("Значение cnt меньше 7, величиваем");
    project.Variables["cnt"].Value = (int.Parse(project.Variables["cnt"].Value) + 1).ToString();

}
else
{
    project.Variables["cnt"].Value = "0"; // Устанавливаем значение переменной в 0
    throw new Exception("НЕ разгадали капчу");
}


Random rnd = new Random();

// Указываем XPath для элемента
string xpath = "//p[contains(text(), 'Maximum')]/ancestor::div/following-sibling::div//div";

// Находим элемент
HtmlElement he = instance.ActiveTab.FindElementByXPath(xpath, 0);
if (he.IsVoid) throw new Exception("Элемент не найден по указанному XPath!");

// Получаем координаты элемента
string strX = he.GetAttribute("leftInbrowser");
string strY = he.GetAttribute("topInbrowser");

// Преобразуем координаты из строк в целые числа
if (!int.TryParse(strX, out int x) || !int.TryParse(strY, out int y))
{
    throw new Exception("Не удалось преобразовать координаты в числа.");
}

// Добавляем смещение по осям X и Y
int offsetX = 30;
int offsetY = 30;
int targetX = x + offsetX;
int targetY = y + offsetY;

// Перемещаем курсор к указанным координатам с полной эмуляцией
instance.ActiveTab.FullEmulationMouseMove(targetX,  targetY);

// Выполняем клик левой кнопкой мыши
instance.ActiveTab.FullEmulationMouseClick("left", "click");
 

Кто просматривает тему: (Всего: 4, Пользователи: 2, Гости: 2)