- Регистрация
- 03.10.2022
- Сообщения
- 25
- Реакции
- 5
- Баллы
- 3
Добавьте сюда хотя бы 10 разных каптч.Добрый день.
Написан скрипт по регистрации аккаунтов , как только дело доходит до решение капчи - все встает колом.
Перепробовал разные сервисы, ничего не помогает.
Может есть какие то идеи как решить эту "несложную капчу"?
этоdata:image/png;base64,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
Предложений много, умельцев меньше, вы умеете?Картинка всегда идентичная.
Самое простое что можно сделать - это просто выкачать все картинки (их конечное значение).
Каждую из них обрезать по диаметру круга.
И каждой картинке указать правильный вариант.
А дальше дёргать из какого-то словаря что получилось.
Посмотреть вложение 98071
Посмотреть вложение 98072
а почему 72? 144 как я посчитал, и их может быть гораздо больше, потому что часы могут быть смещены на неск см влево, вправо. Были одинаковые картинки с разными ссылками.А нельзя просто все 72 варианта base64 засунуть в список в формате base64;time и брать оттуда соответствие?
Предложений много, умельцев меньше, вы умеете?
string base64 = project.Variables["base64"].Value;
using (Bitmap img = new Bitmap(new MemoryStream(Convert.FromBase64String(base64)))) {
int[,]arr = new int[img.Width,img.Height];
double b = 0;
for (int y = 0; y < img.Height; y++)
for (int x = 0; x < img.Width; x++)
b += img.GetPixel(x, y).GetBrightness();
b = b / (img.Width * img.Height);
b = b < .5 ? .2 : b;
b = b > .5 ? .7 : b;
// Преобразование изображения в черно-белое на основе средней яркости
for (int y = 0; y < img.Height; y++)
for (int x = 0; x < img.Width; x++)
arr[x,y] = img.GetPixel(x, y).GetBrightness() > b ? 0 : 1;
project.Context["bin_int"] = arr; // Результат выведем в контекст
}
int[,] img = project.Context["bin_int"]; // Взяли данные с контекста
List<int> x_img = new List<int>();
List<int> y_img = new List<int>();
for (int x = 0; x < img.GetLength(0); x++){
for (int y = 0; y < img.GetLength(1); y++) {
if(img[x,y] == 1) {
x_img.Add(x);
y_img.Add(y);
}
}
}
int x_max = x_img.Max();
int x_min = x_img.Min();
int y_max = y_img.Max();
int y_min = y_img.Min();
if(x_max < img.GetLength(0)) x_max++;
if(x_min > 0) x_min--;
if(y_max<img.GetLength(1)) y_max++;
if(y_min>0) y_min--;
string base64 = string.Empty;
using (Bitmap bmp = new Bitmap(x_max-x_min, y_max-y_min)){
for(int y = y_min; y<y_max; y++)
for(int x = x_min; x<x_max;x++)
bmp.SetPixel(x-x_min, y-y_min, img[x, y] == 1 ? Color.Black : Color.White);
using (var ms = new MemoryStream()) {
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
base64= Convert.ToBase64String(ms.GetBuffer());
}
}
project.Context["bin_base64"] = base64; // Тут находится обрезанная картинка
string base64_1 = project.Variables["base64"].Value;
string base64_2 = project.Context["bin_base64"];
string image_html = String.Empty;
image_html = string.Format(@"<img style=""display: block; border-style: solid;border-color: red;margin:10px auto;"" width="""" src=""data:image/png;base64,{0}"" alt=""CAPTCHA Image"" /></div>",base64_1);
image_html= image_html+ string.Format(@"<p></p><div><img style=""display: block; border-style: solid;border-color: red; margin:10px auto; "" width="""" src=""data:image/png;base64,{0}"" alt=""CAPTCHA Image"" /></div>",base64_2);
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
string html = string.Format(@"<html><body>{0}</body></html>",image_html);
tab.SetSourceText(html);
если хочешь чтоб нормально помогли, нормально подавай информацию.Не могу прикрепить сокращенную ссылку, не получается.
нет желания заняться этим?Переводим картинку в массив 0 и 1:string base64 = project.Variables["base64"].Value; using (Bitmap img = new Bitmap(new MemoryStream(Convert.FromBase64String(base64)))) { int[,]arr = new int[img.Width,img.Height]; double b = 0; for (int y = 0; y < img.Height; y++) for (int x = 0; x < img.Width; x++) b += img.GetPixel(x, y).GetBrightness(); b = b / (img.Width * img.Height); b = b < .5 ? .2 : b; b = b > .5 ? .7 : b; // Преобразование изображения в черно-белое на основе средней яркости for (int y = 0; y < img.Height; y++) for (int x = 0; x < img.Width; x++) arr[x,y] = img.GetPixel(x, y).GetBrightness() > b ? 0 : 1; project.Context["bin_int"] = arr; // Результат выведем в контекст }
Обрезаем все строки/столбцы, в которых нет черных пикселей:int[,] img = project.Context["bin_int"]; // Взяли данные с контекста List<int> x_img = new List<int>(); List<int> y_img = new List<int>(); for (int x = 0; x < img.GetLength(0); x++){ for (int y = 0; y < img.GetLength(1); y++) { if(img[x,y] == 1) { x_img.Add(x); y_img.Add(y); } } } int x_max = x_img.Max(); int x_min = x_img.Min(); int y_max = y_img.Max(); int y_min = y_img.Min(); if(x_max < img.GetLength(0)) x_max++; if(x_min > 0) x_min--; if(y_max<img.GetLength(1)) y_max++; if(y_min>0) y_min--; string base64 = string.Empty; using (Bitmap bmp = new Bitmap(x_max-x_min, y_max-y_min)){ for(int y = y_min; y<y_max; y++) for(int x = x_min; x<x_max;x++) bmp.SetPixel(x-x_min, y-y_min, img[x, y] == 1 ? Color.Black : Color.White); using (var ms = new MemoryStream()) { bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png); base64= Convert.ToBase64String(ms.GetBuffer()); } } project.Context["bin_base64"] = base64; // Тут находится обрезанная картинкаПосмотреть вложение 98073Смотрим в браузере результат до и после:string base64_1 = project.Variables["base64"].Value; string base64_2 = project.Context["bin_base64"]; string image_html = String.Empty; image_html = string.Format(@"<img style=""display: block; border-style: solid;border-color: red;margin:10px auto;"" width="""" src=""data:image/png;base64,{0}"" alt=""CAPTCHA Image"" /></div>",base64_1); image_html= image_html+ string.Format(@"<p></p><div><img style=""display: block; border-style: solid;border-color: red; margin:10px auto; "" width="""" src=""data:image/png;base64,{0}"" alt=""CAPTCHA Image"" /></div>",base64_2); Tab tab = instance.ActiveTab; if (tab.IsBusy) tab.WaitDownloading(); string html = string.Format(@"<html><body>{0}</body></html>",image_html); tab.SetSourceText(html);
Посмотреть вложение 98074
А дальше чтобы что-то делать - нужно собрать базу картинок, чтобы убедиться, что совпадения есть.
И база должна быть не 72 картинки, как говорят выше, а как можно больше, так как картинки могут иметь искажения.
Но, принцип думаю я объяснил - собираете базу картинок, режете их по периметру, дальше смотрите появляются ли совпадения - если появляются - задача решена. Если совпадений нет - тогда уже нужно придумывать как имея центральную точку + угол определить куда он смотрит.....
Вот что получилось собрать.нет желания заняться этим?


