Как кликнуть по чекбоксу?

one

Client
Регистрация
22.09.2015
Сообщения
6 930
Благодарностей
1 293
Баллы
113
Из инструмента разработчиков вытянул xPath но попасть по чек боксу не получается.

134200

134201
 

SellProduct_AD

Пользователь
Регистрация
05.04.2025
Сообщения
69
Благодарностей
22
Баллы
8
Можно использовать клик по картинке, если shadow-root закрытый там.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 930
Благодарностей
1 293
Баллы
113

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
547
Благодарностей
383
Баллы
63
Для вашего сайта путь "//*[@id='cf-turnstile']/div" (он уже прописан)
остальные не стал удалять, вдруг когда-то пригодятся на других сайтах вам.


C#:
void setE(string word) { throw new Exception(word); }

int tyBrtype = 0;
string tp = instance.BrowserType.ToString().ToLower();
if (tp.Equals("chromium")) { tyBrtype = 1; }

if (tyBrtype != 1) { setE("Только для Сhromium"); }

Tab tab = instance.ActiveTab;

// Установим таймаут ожидания для поиска элементов
int timeout = 10; // Таймаут в секундах
bool elementFound = false; // Флаг, что элемент найден
HtmlElement elementToClick = null; // Элемент, по которому будем кликать

// Список XPath для поиска
string[] xpaths = new string[]
{
    "//*[@id='cf-turnstile']/div",
    "//input[@type='hidden' and @name='cf-turnstile-response']",
    "//*[@id='NOic5']/div/div",
    "//div[@style='margin-top:32px;margin-bottom:64px;']",
    "//input[@name='cf-turnstile-response']",
    "//div[@class='cf-turnstile']",
    "//div[.//input[@name='cf-turnstile-response']]",
    "//div[contains(@id, 'cf') and contains(@id, 'widget')]",
    "//div[contains(@data-sitekey, '0x')]",
    "//div[@class='main-wrapper']",
    "/html/body/div[1]/div[1]/div[1]/div[1][//p[text()='Verify you are human by completing the action below.']]"
};

// Минимальные значения координат
int minCoord = 50;

// Цикл ожидания элементов
for (int i = 0; i < timeout; i++)
{
    foreach (string xpath in xpaths)
    {
        // Попытка найти элемент по текущему XPath
        var element = tab.FindElementByXPath(xpath, 0);
        if (element != null)
        {
            // Проверяем координаты и видимость элемента
            var coords = element.DisplacementInTabWindow;
            string style = element.GetAttribute("style");

            // Условие: координаты больше минимальных значений и элемент видим
            if (coords.X > minCoord && coords.Y > minCoord &&
                (string.IsNullOrEmpty(style) ||
                (!style.Contains("display: none") && !style.Contains("visibility: hidden"))))
            {
                elementToClick = element;
                elementFound = true;

                // Логирование XPath, по которому найден элемент
                project.SendInfoToLog($"Элемент найден по XPath: {xpath}", true);

                break; // Элемент найден, выходим из цикла
            }
        }
    }

    if (elementFound) break; // Если элемент найден, прекращаем поиск

    // Пауза перед следующей проверкой
    System.Threading.Thread.Sleep(1000);
}

// Если элемент найден
if (elementFound && elementToClick != null)
{
    // Пауза перед кликом (например, для стабилизации страницы)
    System.Threading.Thread.Sleep(1000);

    // Получение координат элемента
    var coords = elementToClick.DisplacementInTabWindow;

    // Клик с заданным смещением
    tab.MouseClick(coords.X + 30, coords.Y + 30, "left", "click");

    // Лог успешного клика
    project.SendInfoToLog($"Элемент успешно найден и выполнен клик. Координаты: X={coords.X + 30}, Y={coords.Y + 30}.", true);
}
else
{
    // Если ни один элемент не найден, выполняем поиск по изображению
    var imgHash = "iVBORw0KGgoAAAANSUhEUgAAADAAAAA9CAYAAADrnOpZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAETSURBVGhD7doxDoIwGIbhXye4AjsbI5wDRjgEE1fgBhyAlRHOwcrGxCkY1TbVBDUO+psvTb5nKWUgfWk0qfF0uRGP2YBt29zUP4+AKIrcLb+c3egtBqAxAI0BaAxAYwAaA9AYgMYANAagqZ2J932XaZpkWRZ7rSXLMsnzXMIwdHeO1HZgGAaZ51l18YZ55jiObvZKbQeaprFjXdcSx7G9/tW6rtJ1nX37bdu6u0fqnwGtxRv3Z33aVX4LoTEAjQFoDEBjABoD0BiAxgA0Bjwzx0At92cFQWDHd9TOxH3f218k/iFNU6mqys2O1HagLEtJkuTj2/qGWXxRFG72iv+VQGMAGgPQGIDGADQGoDEAzfMAkStWLWCMR24thgAAAABJRU5ErkJggg==";

    Document mainDocument = tab.MainDocument;
    if (mainDocument.IsVoid) { return -1; }
    
    string rectangleString = tab.FindImage(imgHash, new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 90);
    if (!String.IsNullOrWhiteSpace(rectangleString))
    {
        string[] split = rectangleString.Split(',');
        Rectangle rectangle = new System.Drawing.Rectangle(
            System.Convert.ToInt32(split[0].Trim()),
            System.Convert.ToInt32(split[1].Trim()),
            System.Convert.ToInt32(split[2].Trim()),
            System.Convert.ToInt32(split[3].Trim()));

        if (!rectangle.IsEmpty)
        {
            rectangle = new System.Drawing.Rectangle(rectangle.X + 30, rectangle.Y + 34, 6, 6);
            tab.RiseEvent("click", rectangle, "Left");

            project.SendInfoToLog("Клик по изображению выполнен успешно.", true);
        }
    }
    else
    {
        project.SendInfoToLog("Элементы не найдены ни по XPath, ни по изображению.", true);
    }
}
 

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