Месяца 2-3 назад в теме "Внеконкурсные статьи" был выложен закрытый плагин для решения рекапчи, решение происходило через CapMonster2, но тему удалили. В самом начале разработки никак не получалось подружить Zennoposter и CapMonster2 так, как мне надо (через json не хотело работать), и была вторая проблема - при отправке картинок больше 100кб выскакивала ошибка "The Uri string is too long", хотя использовалось Uri.EscapeDataString. Выкладываю сюда скрипт на c#, возможно кому-то пригодится.
Название самой функции EncodeString за место Uri.EscapeDataString
О предпосылках создания шаблона и почему возникла такая потребность:
Все началось из-за безысходности и желания заработать хоть немного денег в трудные времена, когда разработчиков много, а задачи решают лишь немногие. Нужно было создать бота для прохождения капчи на сайте Epic Games. Selenium и Puppeteer не подходили, так как эмуляция отпечатков была слишком сложной задачей. После успешного решения рекапчи и написания плагина, поступило много предложений по другим видам капчи. К сожалению, не все удалось реализовать, но большинство задач были выполнены.
Какой результат получился:
Получилась замечательная коллекция плагинов для решения капчи, и в этом примере представлен шаблон, показывающий, как можно отправлять изображения рекапчи в CapMonster2. На поиск информации ушло много времени, так как данных о том, как отправлять капчу такого рода из ZennoPoster в CapMonster2, очень мало.
Используя данный шаблон:
Этот шаблон — всего лишь пример того, как можно найти окно рекапчи и сделать его скриншот. Я считаю, что это уже половина решения проблемы, ведь начальная цель достигнута. Все остальные манипуляции, такие как определение типа капчи, идентификация изображения 3x3 или 4x4, или работа с капчей 3x3, которая постоянно исчезает и меняется, — это уже формальности.
Плюс бонус для тех, кто делает плагин для рекапчи.
Так же прилагаю файл на c# (*.zp) для автоматического определения области создания скриншота рекапчи2 и отправки этих данных в capmonster2.
Спасибо за внимание!
Название самой функции EncodeString за место Uri.EscapeDataString
О предпосылках создания шаблона и почему возникла такая потребность:
Все началось из-за безысходности и желания заработать хоть немного денег в трудные времена, когда разработчиков много, а задачи решают лишь немногие. Нужно было создать бота для прохождения капчи на сайте Epic Games. Selenium и Puppeteer не подходили, так как эмуляция отпечатков была слишком сложной задачей. После успешного решения рекапчи и написания плагина, поступило много предложений по другим видам капчи. К сожалению, не все удалось реализовать, но большинство задач были выполнены.
Какой результат получился:
Получилась замечательная коллекция плагинов для решения капчи, и в этом примере представлен шаблон, показывающий, как можно отправлять изображения рекапчи в CapMonster2. На поиск информации ушло много времени, так как данных о том, как отправлять капчу такого рода из ZennoPoster в CapMonster2, очень мало.
Используя данный шаблон:
Этот шаблон — всего лишь пример того, как можно найти окно рекапчи и сделать его скриншот. Я считаю, что это уже половина решения проблемы, ведь начальная цель достигнута. Все остальные манипуляции, такие как определение типа капчи, идентификация изображения 3x3 или 4x4, или работа с капчей 3x3, которая постоянно исчезает и меняется, — это уже формальности.
C#:
string host="1.1.1.1:8080";
string img = ""; //base64 image
string id = "";
string apikey = "checkapy";
string t = "bus";
string setka = "true";
string bodyS ="method=base64&key="+apikey+"&CapMonsterModule=ZennoLab.ReCaptcha2&TaskDef="+Uri.EscapeDataString(t)+"&IsNotDynamic="+setka+"&body="+EncodeString(img);
//Отправка задания в софт
var answer = ZennoPoster.HTTP.Request(
method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.POST,
url: "http://"+host+"/in.php",
content: bodyS,
contentPostingType: "application/x-www-form-urlencoded",
respType: ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly
);
var answerInt = Regex.Replace(answer,@"[^0-9]","");
id=answerInt;
//получение ответа
answer = ZennoPoster.HTTP.Request( method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET, url: @"http://"+host+"/res.php?action=get&id="+id+"&key="+apikey, respType:ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly);
Thread.Sleep(4000);
//https://stackoverflow.com/questions/6695208/uri-escapedatastring-invalid-uri-the-uri-string-is-too-long
string EncodeString(string str){
//maxLengthAllowed .NET < 4.5 = 32765;
//maxLengthAllowed .NET >= 4.5 = 65519;
int maxLengthAllowed = 65519;
StringBuilder sb = new StringBuilder();
int loops = str.Length / maxLengthAllowed;
for (int i = 0; i <= loops; i++){
sb.Append(Uri.EscapeDataString(i < loops ? str.Substring(maxLengthAllowed * i, maxLengthAllowed) : str.Substring(maxLengthAllowed * i)));
}
return sb.ToString();
}
C#:
string textRecText(string t){
if(t.Contains("/m/")){
string otv = "";
if(t=="/m/0k4j"){ otv="car"; }
else if(t=="/m/06gfj"){ otv="roads"; }
else if(t=="/m/09d_r"){ otv="mountain"; }
else if(t=="/m/01bjv"){ otv="bus"; }
else if(t=="/m/015kr"){ otv="bridge"; }
else if(t=="/m/0199g"){ otv="bicycle"; }
else if(t=="/m/019jd"){ otv="boat"; }
else if(t=="/m/014xcs"){ otv="crosswalk"; }
else if(t=="/m/01pns0"){ otv="hydrant"; }
else if(t=="/m/015qff"){ otv="trafficlight"; }
else if(t=="/m/04_sv"){ otv="motorcycle"; }
else if(t=="/m/013_1c"){ otv="sculptures"; }
else if(t=="/m/0pg52"){ otv="taxi"; }
else if(t=="/m/01lynh"){ otv="stairs"; }
else if(t=="/m/01jk_4"){ otv="chimney"; }
else if(t=="/m/013xlm"){ otv="tractors"; }
else if(t=="/m/015qbp"){ otv="parkingmeters"; }
else if(t=="/m/0cdl1"){ otv="palm"; }
else if(t=="/m/0c9ph5"){ otv="flower"; }
else if(t=="/m/07jdr"){ otv="train"; }
else if(t=="/m/07j7r"){ otv="tree"; }
else{ otv=t; }
return otv;
}
return t;
}
Спасибо за внимание!
Вложения
-
10,8 КБ Просмотры: 59
Последнее редактирование: