пишитеЗавтра могу написать в личку, если ещё будет актуально.
пишитеЗавтра могу написать в личку, если ещё будет актуально.
такая же картина и у меняПодскажите пожалуйста, в чем проблема может бытЬ?)
Выполнение действия CSharp OwnCode: GeeTest. Overlay image size must be equal to source image size.
Спасибо. Но не работает.К сожалению, Geetest нам присылает только картинку с тёмным пазлом, причем запутанную, поэтому дабы не усложнять себе жизнь, просто делаем скриншот из инстанса.
Делаем скриншот картинки с тёмным пазлом:HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("canvas", "class", "geetest_canvas_slice geetest_absolute", "regexp", 0); //Получаем элемент цветного пазла he.SetAttribute("style", "opacity: 0; display: block;"); //Убираем цветной пазл с помощью редактирования атрибута style, чтобы он не мешал нам int left = Convert.ToInt32(he.GetAttribute("left")); //Получаем координату элемента по left int top = Convert.ToInt32(he.GetAttribute("top")); //Получаем координату элемента по top long unixTime = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds; //Получаем UnixTime в миллисекундах ZennoPoster.ImageProcessingCropFromScreenshot(instance.Port, project.Directory + "\\" + unixTime + ".jpg", left, top, he.Width, he.Height, "pixel"); //Делаем скриншот по координатам элемента и сохраняем в папку с шаблоном System.Threading.Thread.Sleep(1000); //Небольшая пауза, чтобы система успела сохранить файл System.Drawing.Bitmap image = (Bitmap)Bitmap.FromFile(project.Directory + "\\" + unixTime + ".jpg"); //Загружаем скриншот обратно в код
Теперь нам нужен "фон". Его мы можем получить, сложив пару одинаковых картинок с разным расположением тёмного пазла в любом графическом редакторе.
Посмотреть вложение 45603 + Посмотреть вложение 45605 = Посмотреть вложение 45606
Картинки можно получить с помощью предыдущего кода.
Теперь закидываем все фоновые картинки (на eBay их 4) в код, чтобы они не пылились у нас на жестком диске. Предварительно конвертируем их в Base64 с помощью любого онлайн сервиса.
Посмотреть вложение 45607
P.S. Я сделал это так, но вы также можете хранить их в папке с шаблоном и загружать с помощью: System.Drawing.Bitmap image = (Bitmap)Bitmap.FromFile
Отлично! У нас загружена картинка и загружены фоны, но нужно определить какой из фонов выдал Geetest в конкретный момент времени.
Для этого необходимо получить цвет "нулевого" пикселя каждого фона и с помощью логики определить какой сейчас фон подкинула каптча.
Получаем цвет:HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("canvas", "class", "geetest_canvas_slice geetest_absolute", "regexp", 0); he.SetAttribute("style", "opacity: 0; display: block;"); int left = Convert.ToInt32(he.GetAttribute("left")); int top = Convert.ToInt32(he.GetAttribute("top")); long unixTime = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds; ZennoPoster.ImageProcessingCropFromScreenshot(instance.Port, project.Directory + "\\" + unixTime + ".jpg", left, top, he.Width, he.Height, "pixel"); System.Threading.Thread.Sleep(1000); System.Drawing.Bitmap image = (Bitmap)Bitmap.FromFile(project.Directory + "\\" + unixTime + ".jpg"); return image.GetPixel(0,0);
Определяем и загружаем фон:string color = String.Empty; //Определяем фон if (image.GetPixel(0,0).ToString().Contains("R=76")) color = red; if (image.GetPixel(0,0).ToString().Contains("R=102")) color = red2; if (image.GetPixel(0,0).ToString().Contains("R=155")) color = blue; if (image.GetPixel(0,0).ToString().Contains("R=221")) color = white; //Загружаем фон byte[] imageBytes = Convert.FromBase64String(color); var ms = new MemoryStream(imageBytes); Bitmap sourceImage = new Bitmap(ms);
1. Собрать по каждому изображению базу, чтобы получить базовое изображение.Спасибо. Но не работает.
Совершенно неинформативные части о скриншотах, о получении цвета пикселя и получении фонов.
Где хранится информация о цвете R ? и вообще о цветах пикселя?
Что делать если мне нужен 10:10 пиксель?
Я конкретно заморочился, сделал 22 фона в фотошопе, но 10:10 пиксель видимо не совпадает после сохранения примененного в фотошоп. Получил 10:10 пиксель через другую программу автоматизации. Иногда валятся ошибки if, но в основном просто слегка дергается рычажок и пазл никуда не попадает.
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("canvas", "class", "geetest_canvas_slice geetest_absolute", "regexp", 0);
he.SetAttribute("style", "opacity: 0; display: block;");
int left = Convert.ToInt32(he.GetAttribute("left"));
int top = Convert.ToInt32(he.GetAttribute("top"));
long unixTime = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds;
ZennoPoster.ImageProcessingCropFromScreenshot(instance.Port, project.Directory + "\\" + unixTime + ".jpg", left, top, he.Width, he.Height, "pixel");
System.Threading.Thread.Sleep(1000);
System.Drawing.Bitmap image = (Bitmap)Bitmap.FromFile(project.Directory + "\\" + unixTime + ".jpg");
return image.GetPixel(0,0);
Куда он пишет цвет пикселя? Где сохраняется эта база значений?2. Прогнать каждое изображение, собрать базу значений
4. Допилить пиксели для эмуляции движенийC#:HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("canvas", "class", "geetest_canvas_slice geetest_absolute", "regexp", 0); he.SetAttribute("style", "opacity: 0; display: block;"); int left = Convert.ToInt32(he.GetAttribute("left")); int top = Convert.ToInt32(he.GetAttribute("top")); long unixTime = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds; ZennoPoster.ImageProcessingCropFromScreenshot(instance.Port, project.Directory + "\\" + unixTime + ".jpg", left, top, he.Width, he.Height, "pixel"); System.Threading.Thread.Sleep(1000); System.Drawing.Bitmap image = (Bitmap)Bitmap.FromFile(project.Directory + "\\" + unixTime + ".jpg"); return image.GetPixel(0,0);
Пожалуйста. Пишите так, как будто я Вам лично что-то должен по жизни.Спасибо. Но не работает.
Совершенно неинформативные части о скриншотах, о получении цвета пикселя и получении фонов.
Где хранится информация о цвете R ? и вообще о цветах пикселя?
Что делать если мне нужен 10:10 пиксель?
Я конкретно заморочился, сделал 22 фона в фотошопе, но 10:10 пиксель видимо не совпадает после сохранения примененного в фотошоп. Получил 10:10 пиксель через другую программу автоматизации. Иногда валятся ошибки if, но в основном просто слегка дергается рычажок и пазл никуда не попадает.
Тема отличная. И что то стало разгадывать на Zennoposter 7.4Пожалуйста. Пишите так, как будто я Вам лично что-то должен по жизни.
Статья - бесплатный пример работы с библиотекой для решения GeeTest. Если поковыряться, можно найти методы получения .R .G .B цветов для каждого из пикселей типа integer и сравнивать их с помощью условий > или < или <= или >=
image.GetPixel(0,0) здесь несложно догадаться что 10:10 пиксель это: image.GetPixel(10,10)
Нз, делал, и не раз, работало, но, но, но... много нюансов и порой профит не такой высокий.А еще эта капча не нажимается стандартными способами зеннопостера
ПопробуюНз, делал, и не раз, работало, но, но, но... много нюансов и порой профит не такой высокий.
То есть кол-во неудач, занимает больше времени, чем использовать сервисы, и вот как вариант использовать CapMonsterCloud GeeTest
Хотелось бы найти наиболее дешевые варианты. Чтобы доходность хоть какая-то былаНз, делал, и не раз, работало, но, но, но... много нюансов и порой профит не такой высокий.
То есть кол-во неудач, занимает больше времени, чем использовать сервисы, и вот как вариант использовать CapMonsterCloud GeeTest
Нажимается там все нормально. Элементы надо искать по правильному и все нажимается и находится.А еще эта капча не нажимается стандартными способами зеннопостера
КовыряюсьНажимается там все нормально. Элементы надо искать по правильному и все нажимается и находится.
Компиляция кода Ошибка в действии "CS1503" "Argument 1: cannot convert from 'System.Drawing.Bitmap' to 'string'". [Строка: 4; Cтолбец: 46]
string color = project.Variables["image64"].Value;
//Загружаем фон
System.Drawing.Bitmap image = (Bitmap)Bitmap.FromFile(project.Variables["bg_pixel"].Value);
byte[] imageBytes = Convert.FromBase64String(image);
var ms = new MemoryStream(imageBytes);
Bitmap sourceImage = new Bitmap(ms);
строку надо подавать на вход этой процедуре, а не System.Drawing.BitmapКомпиляция кода Ошибка в действии "CS1503" "Argument 1: cannot convert from 'System.Drawing.Bitmap' to 'string'". [Строка: 4; Cтолбец: 46]
Тут показан пример нахождения места с кусочком пазла. Подобным способом можете попробовать определить оба места и перетащить один кусочек на другой. В принципе должно сработатьПосмотреть вложение 111064такую капчу решит? она без ползунка
Напиши в личку мне, обсудим.Кто может помочь решить капчу GEETEST методом топикстартера, напишите в лс цену пожалуйста)