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

  • Автор темы Автор темы backoff
  • Дата начала Дата начала

backoff

Client
Регистрация
20.04.2015
Сообщения
6 355
Реакции
6 640
Баллы
113
капча
124958

там где указан пример, пример всегда идет в виде base64, и всегда тон цвета немного меняется, в 16ричном коде, он так же отличается, внизу, куда надо ткнуть на "правильную кнопку" красный всегда ff0000, а в примере разный
124959
124960

остальные цвета так же, статичны в правильных ответах и динамика в примере

просто как пример ответов
C#:
Развернуть Свернуть Копировать
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAASCAIAAADOjonJAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAHklEQVQ4jWN8zSzHQA3ARBVTRg0aNWjUoFGDBpFBAMAeATAO+52rAAAAAElFTkSuQmCC - красный
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAGCAIAAACepSOSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAFElEQVQImWP890+IAQdgwiUxAHIAWqcCGooMjd8AAAAASUVORK5CYII= - желтый
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAICAIAAAC6ZnJRAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAFElEQVQImWP8KMPKgAGYMIUGiSgAwVgBIoJew6QAAAAASUVORK5CYII= - красный


вот пример
картинка
124964

код
C#:
Развернуть Свернуть Копировать
<p id="btn"><p style="font-size: 1.2em;">Если вы человек, нажмите на кнопку с цветом, наиболее похожим на этот: <strong><img width="40" height="20" style="vertical-align: middle;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAFCAIAAAAhVuBnAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAFUlEQVQYlWPkE9nLQDFgotyIYWkKADa4AOnAZkMwAAAAAElFTkSuQmCC"></strong></p>

<form action="/?url=%2Fauth%2Fsign-up%2F&amp;utm_referrer=https%3A%2F%2Fmy.mastergrad.com%2F" method="post">
<input name="time" type="hidden" value="1725443006">
<input name="submit" type="hidden" value="submit">
<input name="antibot" type="hidden" value="cabd4875adecd9f418621f1521af222b">
<input name="colors" type="hidden" value="a9d1de00639aaaf982682cdc55820329">
<input name="cid" type="hidden" value="1725443006.661">

<p><button style="background:RED; display: inline;" class="btn btn-color" type="submit" name="color" value="RED" title="КРАСНЫЙ"></button>
<button style="background:GRAY; display: inline;" class="btn btn-color" type="submit" name="color" value="GRAY" title="СЕРЫЙ"></button>
<button style="background:BLUE; display: inline;" class="btn btn-color" type="submit" name="color" value="BLUE" title="СИНИЙ"></button>
<button style="background:YELLOW; display: inline;" class="btn btn-color" type="submit" name="color" value="YELLOW" title="ЖЕЛТЫЙ"></button>
<button style="background:BLACK; display: inline;" class="btn btn-color" type="submit" name="color" value="BLACK" title="ЧЕРНЫЙ"></button>
<button style="background:GREEN; display: inline;" class="btn btn-color" type="submit" name="color" value="GREEN" title="ЗЕЛЕНЫЙ"></button> </p></form></p>
 
Последнее редактирование:
Особо не вникая, между разными цветами можно получить расстояние, типо так
124965

чем меньше расстояние тем выше вероятность совпадения.
Удачи.
 
серьезно, картинкой? )))
да блин там 3-и строчки :-)
C#:
Развернуть Свернуть Копировать
 /// <summary>
        /// Метод рассчитывает расстояние между цветами
        /// </summary>
        /// <param name="OriginalColor"></param>
        /// <param name="TargetColor"></param>
        /// <returns></returns>
        private int DistanceColor(Color OriginalColor, Color TargetColor)
        {
            // Расчет расстояния между целевым цветом и текущим пикселем
            int distance = (int)(Math.Pow(OriginalColor.R - TargetColor.R, 2) +
                                 Math.Pow(OriginalColor.G - TargetColor.G, 2) +
                                 Math.Pow(OriginalColor.B - TargetColor.B, 2));
            distance = (int)Math.Sqrt(distance);


            return distance;

        }
 
тебе надо получить цвет пикселей всех заданных цветов и целевого цвета, и в цикле сравнить - там где будет наименьшая дистанция между цветами и будет правильным выбором.
Как ты получишь цвета это уже тебе виднее, скринить и оттуда брать или какие-то значения из кода страницы дёргать и уже из них получить цвет пискелей это видимо сам определишься.
 
тебе надо получить цвет пикселей всех заданных цветов и целевого цвета, и в цикле сравнить - там где будет наименьшая дистанция между цветами и будет правильным выбором.
Как ты получишь цвета это уже тебе виднее, скринить и оттуда брать или какие-то значения из кода страницы дёргать и уже из них получить цвет пискелей это видимо сам определишься.
нене, как раз это я прекрасно понимаю, как мне с кодом быть, что за что отвечает, я про это
как мне передать цвет в метод, может есть шарп?
в шарпе не алло вообще
 
вот здесь посмотри как получить цвет пикселя картинки ТЫЦ
потом уже объект Color (это объект пикселя у тебя должен быть) закидываешь в метод который я выше давал.
 
Я вижу такой путь получить - HtmlElement he
из него получить объект Bitmap, типо как-то так - Bitmap originalBitmap = he.DrawAsBitmap(false);

из объекта Bitmap дернуть рандонмый пиксель типо как-то так - Color colorCurrent = originalBitmap .GetPixel(X, Y);
и вроде всё объект Color у тебя есть, такие объекты надо создать для всех картинок и уже их сравнивать.
 
короче как я решил, для меня работает, но решение не идеальное, думаю будут проблемы с большим количеством цветов
снип
C#:
Развернуть Свернуть Копировать
var image = new Bitmap(project.Directory + @"\data\color.jpg");
var pixelColor = new Color();
pixelColor = image.GetPixel(5, 5); //координаты (10,15)
return pixelColor;

1. делаем базу цветов, из которых надо выбирать, они у меня статичные, примерно так:

124990

2. с помощью снипа получаем RGB сохраненной за ранее картинки и нужного пикселя, у меня вся картинка это один цвет.
3. поочередно сравниваем R в базе и тот что взяли, так же G и B
я поставил разброс +-100
100 >= {-Variable.check-} && {-Variable.check-} >= -100

получилось такое
124991
 
  • Спасибо
Реакции: alex1988 и Konrod_m
да что
а можно чутка подробнее? бро, реально, хочешь помочь - помоги, че загадками писать тем более когда не в теме совсем, чего надо вечно вытягивать инфу

нашел лишь снип такой - https://zenno.club/discussion/threa...aspoznavaniju-izobrazhenija.50393/post-376897
но как он работает не сильно понятно, по комментариям +- но что он выдает на какой цвет не понятно, и по идее, судя по этой строке
if ((el >= 70 && el <= 140) || (el >= 300 && el <= 360)) //если цвет похож на зеленый и красный, то есть админ
ровно такой же как у меня
 
да что

а можно чутка подробнее? бро, реально, хочешь помочь - помоги, че загадками писать тем более когда не в теме совсем, чего надо вечно вытягивать инфу

нашел лишь снип такой - https://zenno.club/discussion/threa...aspoznavaniju-izobrazhenija.50393/post-376897
но как он работает не сильно понятно, по комментариям +- но что он выдает на какой цвет не понятно, и по идее, судя по этой строке
if ((el >= 70 && el <= 140) || (el >= 300 && el <= 360)) //если цвет похож на зеленый и красный, то есть админ
ровно такой же как у меня
в ргб каждое из трех значений отвечает за цвет. Одно поменялось и цвет уже другой. в HSB только H отвечает за цвет и можно обращать внимание только на него. Я так делал когда-то с одной шахматной капчей, когда мне нужно было сгруппировать фигуры по цвету, но он слегка отличался. Через ргб это было тяжело. Перегнал цветовую схему в HSB и стало куда проще

Но писать код я не готов) только направление дал
 
Ну, если есть значение цвета в привычном виде #bc34c4
То получить его Hue-значение можно так:

C#:
Развернуть Свернуть Копировать
// Исходный цвет (можно из переменной)
string hex = "#bc34c4";

//Удаляем # в начале, если имеется
if (hex.StartsWith("#"))
    {
        hex = hex.Substring(1);
    }

// Получаем RGB-значения из HEX-кода цвета
int r = int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
int g = int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
int b = int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);

// Создаем объект Color из RGB значений
Color color = Color.FromArgb(r, g, b);
       
// Получаем Hue из RGB
return color.GetHue();

Дальше уже дело за малым: получить hex-значения элементов и выбрать ближайшее по логике, которую описывали выше ))
 
  • Спасибо
Реакции: backoff
Заняться вечером нечем, поэтому продолжаем )))
Получаем hex-значение цвета, который тебе надо искать (благо, картинка "однотонная")...

C#:
Развернуть Свернуть Копировать
// Цвет для поиска из кода страницы
string base64String = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAASCAIAAAAhTOL3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAHklEQVQ4jWNsam9joBJgopZBo2aNmjVq1qhZQ9gsALcGAbPk8uCsAAAAAElFTkSu";

// Удаляем префикс "data:image/png;base64,", если с ним захватываешь из кода
base64String = base64String.Replace("data:image/png;base64,", "");

byte[] imageBytes = Convert.FromBase64String(base64String);

// Преобразуем в изображение
using (MemoryStream ms = new MemoryStream(imageBytes))
using (Bitmap bitmap = new Bitmap(ms))
{

// Извлекаем цвет пикселя в позиции (5, 5) - но можно любой другой, я просто немного от края отступил, можно куда-нить в серединку ))
    Color pixelColor = bitmap.GetPixel(5, 5);

    // Конвертируем цвет в HEX формат
    return string.Format("{0:X2}{1:X2}{2:X2}", pixelColor.R, pixelColor.G, pixelColor.B);
}
Сравнил с тем, что дает "пипетка", совпало до последней цифры ))

Дальше уже его - в HSB, вытаскиваешь H. И сравниваешь с нужными цветами (не знаю, всегда ли они там одинаковые, но, думаю, да).
 
Последнее редактирование:
  • Спасибо
Реакции: backoff
Ну, если есть значение цвета в привычном виде #bc34c4
То получить его Hue-значение можно так:

C#:
Развернуть Свернуть Копировать
// Исходный цвет (можно из переменной)
string hex = "#bc34c4";

//Удаляем # в начале, если имеется
if (hex.StartsWith("#"))
    {
        hex = hex.Substring(1);
    }

// Получаем RGB-значения из HEX-кода цвета
int r = int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
int g = int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
int b = int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);

// Создаем объект Color из RGB значений
Color color = Color.FromArgb(r, g, b);
     
// Получаем Hue из RGB
return color.GetHue();

Дальше уже дело за малым: получить hex-значения элементов и выбрать ближайшее по логике, которую описывали выше ))

125039

Спасибо! вот ЭТО помощь, теперь осталось найти таблицу цветов и значений, но я думаю это что-то типа этого
125038
перестрою логику в шабе с новыми значениями, но и с РГБ идет 100% пробив, но понимаю что это полная шляпа))

еще раз спасибо
 
Спасибо! вот ЭТО помощь, теперь осталось найти таблицу цветов и значений, но я думаю это что-то типа этого
Я думаю, проще просто прописать значения всех вариантов, которые он показывает (просто сделать пару десятков заходов и собрать варианты, но, есть ощущение, что их там шесть, просто в разном порядке). Ну и уже их так же конвертнуть в нужный (хотя в фотошопе со скриншота пипеткой глянь, он сразу HSB покажет в том числе). А дальше обрабатывать только цвет, который искать.
Будут новые цвета, просто глянь спецификацию css, возьми полный список цветов, которые прописываются текстом (а-ля red, yellow и т.д.) и их сразу обработай в нужный формат. Ну или можешь совместить обработку через код.
 
  • Спасибо
Реакции: backoff
капча
Посмотреть вложение 124958

там где указан пример, пример всегда идет в виде base64, и всегда тон цвета немного меняется, в 16ричном коде, он так же отличается, внизу, куда надо ткнуть на "правильную кнопку" красный всегда ff0000, а в примере разный

остальные цвета так же, статичны в правильных ответах и динамика в примере

просто как пример ответов
C#:
Развернуть Свернуть Копировать
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAASCAIAAADOjonJAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAHklEQVQ4jWN8zSzHQA3ARBVTRg0aNWjUoFGDBpFBAMAeATAO+52rAAAAAElFTkSuQmCC - красный
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAGCAIAAACepSOSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAFElEQVQImWP890+IAQdgwiUxAHIAWqcCGooMjd8AAAAASUVORK5CYII= - желтый
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAICAIAAAC6ZnJRAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAFElEQVQImWP8KMPKgAGYMIUGiSgAwVgBIoJew6QAAAAASUVORK5CYII= - красный


вот пример
картинка
Посмотреть вложение 124964

код
C#:
Развернуть Свернуть Копировать
<p id="btn"><p style="font-size: 1.2em;">Если вы человек, нажмите на кнопку с цветом, наиболее похожим на этот: <strong><img width="40" height="20" style="vertical-align: middle;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAFCAIAAAAhVuBnAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAFUlEQVQYlWPkE9nLQDFgotyIYWkKADa4AOnAZkMwAAAAAElFTkSuQmCC"></strong></p>

<form action="/?url=%2Fauth%2Fsign-up%2F&amp;utm_referrer=https%3A%2F%2Fmy.mastergrad.com%2F" method="post">
<input name="time" type="hidden" value="1725443006">
<input name="submit" type="hidden" value="submit">
<input name="antibot" type="hidden" value="cabd4875adecd9f418621f1521af222b">
<input name="colors" type="hidden" value="a9d1de00639aaaf982682cdc55820329">
<input name="cid" type="hidden" value="1725443006.661">

<p><button style="background:RED; display: inline;" class="btn btn-color" type="submit" name="color" value="RED" title="КРАСНЫЙ"></button>
<button style="background:GRAY; display: inline;" class="btn btn-color" type="submit" name="color" value="GRAY" title="СЕРЫЙ"></button>
<button style="background:BLUE; display: inline;" class="btn btn-color" type="submit" name="color" value="BLUE" title="СИНИЙ"></button>
<button style="background:YELLOW; display: inline;" class="btn btn-color" type="submit" name="color" value="YELLOW" title="ЖЕЛТЫЙ"></button>
<button style="background:BLACK; display: inline;" class="btn btn-color" type="submit" name="color" value="BLACK" title="ЧЕРНЫЙ"></button>
<button style="background:GREEN; display: inline;" class="btn btn-color" type="submit" name="color" value="GREEN" title="ЗЕЛЕНЫЙ"></button> </p></form></p>

125044

C#:
Развернуть Свернуть Копировать
string base64Image = "iVBORw0KGgoAAAANSUhEUgAAABcAAAAFCAIAAAAhVuBnAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAFUlEQVQYlWPkE9nLQDFgotyIYWkKADa4AOnAZkMwAAAAAElFTkSuQmCC";
byte[] imageBytes = Convert.FromBase64String(base64Image);
using (var stream = new System.IO.MemoryStream(imageBytes))
{
    using (var bitmap = new System.Drawing.Bitmap(stream))
    {
        int width = bitmap.Width;
        int height = bitmap.Height;
        long r = 0, g = 0, b = 0;

        for (int y = 0; y < height; y++)
        {
            for (int x = 0; x < width; x++)
            {
                var pixel = bitmap.GetPixel(x, y);
                r += pixel.R;
                g += pixel.G;
                b += pixel.B;
            }
        }

        int totalPixels = width * height;
        var averageColor = System.Drawing.Color.FromArgb((int)(r / totalPixels), (int)(g / totalPixels), (int)(b / totalPixels));

        // Определение имени цвета
        var knownColors = new[]
        {
            new { Name = "Красный", Color = System.Drawing.Color.Red },
            new { Name = "Зеленый", Color = System.Drawing.Color.Green },
            new { Name = "Синий", Color = System.Drawing.Color.Blue },
            new { Name = "Желтый", Color = System.Drawing.Color.Yellow },
            new { Name = "Черный", Color = System.Drawing.Color.Black },
            new { Name = "Белый", Color = System.Drawing.Color.White },
            new { Name = "Серый", Color = System.Drawing.Color.Gray },
            new { Name = "Оранжевый", Color = System.Drawing.Color.Orange },
            new { Name = "Голубой", Color = System.Drawing.Color.Cyan },
            new { Name = "Фиолетовый", Color = System.Drawing.Color.Purple }
        };

        // Нахождение самого близкого цвета
        var closestColor = knownColors
            .OrderBy(c => Math.Sqrt(Math.Pow(averageColor.R - c.Color.R, 2) +
                                     Math.Pow(averageColor.G - c.Color.G, 2) +
                                     Math.Pow(averageColor.B - c.Color.B, 2)))
            .First();

        string colorName = closestColor.Name;

        // Вывод результата
        project.SendInfoToLog($"Средний цвет: {colorName}");
    }
}
 
Последнее редактирование:
  • Спасибо
Реакции: Beast и backoff
Ну и конечное на сегодня. Просто парсим цвет предложенных вариантов, получаем каждый из них в нужном виде таким образом:

C#:
Развернуть Свернуть Копировать
// Сюда подставляем название цвета из кнопок вариантов - они там в background
string colorName = "yellow";

// Получаем объект Color по названию цвета
Color color = Color.FromName(colorName);

// Проверим, если цвет был корректно распознан (IsKnownColor) или имеет определенные компоненты
if (!color.IsKnownColor && color.ToArgb() == 0)
{
    throw new ArgumentException("Хрень какая-то");
}

// Преобразуем в HEX
return string.Format("{0:X2}{1:X2}{2:X2}", color.R, color.G, color.B);

Ну а дальше ты знаешь )))

update. Во, выше уже все готовое написали... Ну, может, кому и мои огрызки пригодятся для какой-то другой логики... Пусть останется... Мне больше самому было интересно )))
 
  • Спасибо
Реакции: Beast и backoff

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