Как решить простую капчу капмонстром на пост гет запросах?

  • Автор темы Автор темы Бишип
  • Дата начала Дата начала

Бишип

Новичок
Регистрация
10.01.2019
Сообщения
5
Реакции
0
Баллы
1
Всех приветствую уважаемые форумчане!
Хочу научиться решать капчу через пост гет запросы капмонстром, может быть кто-то сможет сделать наглядный пример, как решить обычную капчу на этом сайте: https://www.westland.ru/personal/?register=yes ?

Прочитал много инфы по этому, но без наглядного примера не получается разобраться.

Огромная просьба кто отлично понимает, как это делается, показать на примере шаблона.

П.С. Прошу строго не судить, только разбираюсь работе полностью без браузера.
 
1. Создаёте переменные captcha_file и captcha_reportbad.
2. В переменной captcha_file должен быть полный путь к файлу - каптче.
3. Выполняете C# экшен с кодом:
C#:
Развернуть Свернуть Копировать
//Отправка капчи из картинки
byte[] imageArray = System.IO.File.ReadAllBytes(project.Variables["captcha_file"].Value);
string base64String = Convert.ToBase64String(imageArray);
var result = ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "");
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) {
    project.Variables["captcha_reportbad"].Value = tmp[1];
    return tmp[0];
}
return result;

4. Получаете ответ в перенную, которую выберите в свойствах кубика:

PXEgQjQ.png
 
  • Спасибо
Реакции: metal и Бишип
2. В переменной captcha_file должен быть полный путь к файлу - каптче.

То есть я сначала скачиваю картинку капчи на диск, а затем прописываю путь к картинке в этой переменной?
Или я не правильно понял?
 
То есть я сначала скачиваю картинку капчи на диск, а затем прописываю путь к картинке в этой переменной?
Или я не правильно понял?
Вот код чтоб не скачивать по ссылке на комп, а сразу слать, хорошие люди поделились в свое время:

Код:
Развернуть Свернуть Копировать
//Добавить using System.Net;
byte[] captcha_byte;

// получаем каптчу
Uri url_captcha = new Uri("https://www.yandex.ru/captchaimg?aHR0cHM6Ly9leHQuY2FwdGNoYS55YW5kZXgubmV0L2ltYWdlP2tleT0wMDNsRE5ZeFlndjQyYUxyakdPZlNWb3lrTmVEZUY0QQ,,_0/1535635391/373656395b8e6649443c0a78b7ae029c_b127648832aade0bf68c0a356337ed0b");

HttpWebRequest captchaRequest = (HttpWebRequest)WebRequest.Create(url_captcha); //создаём запрос на скачивание капчи
captchaRequest.UserAgent = project.Profile.UserAgent; //Подставляем юзерагент с профиля

WebResponse captchaResponse = captchaRequest.GetResponse();
Stream responseStream = captchaResponse.GetResponseStream();

using (BinaryReader br = new BinaryReader(responseStream))
{
captcha_byte = br.ReadBytes(500000);
br.Close();
}
responseStream.Close();
captchaResponse.Close();

MemoryStream captcha_Stream = new System.IO.MemoryStream(captcha_byte);
Image image_captcha = System.Drawing.Image.FromStream(captcha_Stream);
//Bitmap bitmap_captcha = new Bitmap(image_captcha);

string base64 = Convert.ToBase64String(captcha_byte);

var result = ZennoPoster.CaptchaRecognition("Rucaptcha.dll", base64, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1)
{
return tmp[0];
}
return result;

Только ссылку на капчу и Rucaptcha.dll замени на свое
 
Вот код чтоб не скачивать по ссылке на комп, а сразу слать, хорошие люди поделились в свое время:

Код:
Развернуть Свернуть Копировать
//Добавить using System.Net;
byte[] captcha_byte;

// получаем каптчу
Uri url_captcha = new Uri("https://www.yandex.ru/captchaimg?aHR0cHM6Ly9leHQuY2FwdGNoYS55YW5kZXgubmV0L2ltYWdlP2tleT0wMDNsRE5ZeFlndjQyYUxyakdPZlNWb3lrTmVEZUY0QQ,,_0/1535635391/373656395b8e6649443c0a78b7ae029c_b127648832aade0bf68c0a356337ed0b");

HttpWebRequest captchaRequest = (HttpWebRequest)WebRequest.Create(url_captcha); //создаём запрос на скачивание капчи
captchaRequest.UserAgent = project.Profile.UserAgent; //Подставляем юзерагент с профиля

WebResponse captchaResponse = captchaRequest.GetResponse();
Stream responseStream = captchaResponse.GetResponseStream();

using (BinaryReader br = new BinaryReader(responseStream))
{
captcha_byte = br.ReadBytes(500000);
br.Close();
}
responseStream.Close();
captchaResponse.Close();

MemoryStream captcha_Stream = new System.IO.MemoryStream(captcha_byte);
Image image_captcha = System.Drawing.Image.FromStream(captcha_Stream);
//Bitmap bitmap_captcha = new Bitmap(image_captcha);

string base64 = Convert.ToBase64String(captcha_byte);

var result = ZennoPoster.CaptchaRecognition("Rucaptcha.dll", base64, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1)
{
return tmp[0];
}
return result;

Только ссылку на капчу и Rucaptcha.dll замени на свое

Поменял ссылку на капчу и разгадывание через капмонстр:

DH4Tz.png


Но мне код выдаёт ошибку:

DH4O8.png


Подскажите, что ещё нужно подправить?
 
Подправил код @ibred . Картинка берется без скачивания и без сохранения в файл. Пробуйте:
C#:
Развернуть Свернуть Копировать
HtmlElement he = instance.ActiveTab.FindElementByAttribute("img", "src", "/tools/captcha.php\\?captcha_sid", "regexp", 0);
if (he.IsVoid) return -1;
//Отправка капчи из картинки
string base64String = he.DrawToBitmap(true);
var result = ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "");
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) {
    project.Variables["captcha_reportbad"].Value = tmp[1];
    return tmp[0];
}
return result;
 
Подправил код @ibred . Картинка берется без скачивания и без сохранения в файл. Пробуйте:
C#:
Развернуть Свернуть Копировать
HtmlElement he = instance.ActiveTab.FindElementByAttribute("img", "src", "/tools/captcha.php\\?captcha_sid", "regexp", 0);
if (he.IsVoid) return -1;
//Отправка капчи из картинки
string base64String = he.DrawToBitmap(true);
var result = ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "");
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) {
    project.Variables["captcha_reportbad"].Value = tmp[1];
    return tmp[0];
}
return result;
@Бишип нужно без браузера, на запросах :)

Подскажите, что ещё нужно подправить?
Нужно добавить в GAC System.Net.dll

А в общий код:
C#:
Развернуть Свернуть Копировать
using System.Net;
 
  • Спасибо
Реакции: Бишип
byte[] imageArray = System.IO.File.ReadAllBytes(project.Variables["captcha_file"].Value);
Можно получить картинку в байты без сохранения на диск через RequestBytes.
Всё же, лучше за практику взять throw new Exception("с сообщением об ошибке"), что бы хотя бы знать, на какой строчке она произошла в случае нескольких проверок.
 
Последнее редактирование:
  • Спасибо
Реакции: evgen_po и ibred
Если кого-то не затруднит, могли бы вы скинуть готовый шаблон, чтобы увидеть наглядно, как разгадывается капча без скачивания на диск через капмонстр? На примере этого сайта: https://www.westland.ru/personal/?register=yes или любого другого с простой капчей.
Думаю, это не только мне поможет, но и другим новичкам в будущем.

Большое спасибо всем за ответы и за помощь!
 
Если кого-то не затруднит, могли бы вы скинуть готовый шаблон, чтобы увидеть наглядно, как разгадывается капча без скачивания на диск через капмонстр? На примере этого сайта: https://www.westland.ru/personal/?register=yes или любого другого с простой капчей.
Думаю, это не только мне поможет, но и другим новичкам в будущем.

Большое спасибо всем за ответы и за помощь!
Держите.
 

Вложения

Требуется внести небольшие правки в шаблон, который я скинул.

Найти:
C#:
Развернуть Свернуть Копировать
ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "");

Заменить на:
C#:
Развернуть Свернуть Копировать
ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "CapMonsterModule=ZennoLab.universal");

Так как в этой каптчей другой шрифт и модуль Bitrix2 не подходит, а универсальный справляется на ура :)

GN3it8b.png
 
Поменял ссылку на капчу и разгадывание через капмонстр:

DH4Tz.png


Но мне код выдаёт ошибку:

DH4O8.png


Подскажите, что ещё нужно подправить?
Только Добавить using System.Net; , но у меня тоже ошибку выдал, может куки просто нужны быди под мою капчу.
 
Куки предварительно сохранить в переменной проекта cookie в формате name=value; name1=value1
C#:
Развернуть Свернуть Копировать
byte[] captcha_byte;
string url =  адрес капчи;
string referer = адрес страницы, на которой находится капча
Uri url_captcha = new Uri(url);

HttpWebRequest captchaRequest = (HttpWebRequest)WebRequest.Create(url_captcha); //создаём запрос на скачивание капчи
//Подставляем юзерагент с профиля
captchaRequest.UserAgent = project.Variables["USERAGENT"].Value;
captchaRequest.Referer = referer;

captchaRequest.Accept = project.Profile.HTTPAccept;
captchaRequest.Headers.Add(project.Profile.AcceptLanguage);
captchaRequest.Headers.Add(project.Profile.AcceptEncoding);

captchaRequest.CookieContainer = new System.Net.CookieContainer();
//captchaRequest.Proxy = new WebProxy(

string[] cookies = project.Variables["cookie"].Value.Split(new String[]{"; ","="}, StringSplitOptions.None);
for (int i =0; i< cookies.Length; i +=2) {
    Cookie cookie = new Cookie(cookies[i], cookies[i+1], "/",  url_captcha.Host );
    captchaRequest.CookieContainer.Add(cookie);
}

WebResponse captchaResponse = captchaRequest.GetResponse();
Stream responseStream = captchaResponse.GetResponseStream();
using (BinaryReader br = new BinaryReader(responseStream))
{ 
  captcha_byte = br.ReadBytes(500000);
  br.Close();
}
responseStream.Close();
captchaResponse.Close();
string base64String = Convert.ToBase64String(captcha_byte);

   var result = ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "CapMonsterModule=ZennoLab.universal");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1)
{
   return tmp[0];
}
return result;
 
Последнее редактирование:
  • Спасибо
Реакции: Roman*
Куки предварительно сохранить в переменной проекта cookie в формате name=value; name1=value1
C#:
Развернуть Свернуть Копировать
byte[] captcha_byte;
string url =  адрес капчи;
string referer = адрес страницы, на которой находится капча
Uri url_captcha = new Uri(url);

HttpWebRequest captchaRequest = (HttpWebRequest)WebRequest.Create(url_captcha); //создаём запрос на скачивание капчи
//Подставляем юзерагент с профиля
captchaRequest.UserAgent = project.Variables["USERAGENT"].Value;
captchaRequest.Referer = referer;

captchaRequest.Accept = project.Profile.HTTPAccept;
captchaRequest.Headers.Add(project.Profile.AcceptLanguage);
captchaRequest.Headers.Add(project.Profile.AcceptEncoding);

captchaRequest.CookieContainer = new System.Net.CookieContainer();
//captchaRequest.Proxy = new WebProxy(

string[] cookies = project.Variables["cookie"].Value.Split(new String[]{"; ","="}, StringSplitOptions.None);
for (int i =0; i< cookies.Length; i +=2) {
    Cookie cookie = new Cookie(cookies[i], cookies[i+1], "/",  url_captcha.Host );
    captchaRequest.CookieContainer.Add(cookie);
}

WebResponse captchaResponse = captchaRequest.GetResponse();
Stream responseStream = captchaResponse.GetResponseStream();
using (BinaryReader br = new BinaryReader(responseStream))
{
  captcha_byte = br.ReadBytes(500000);
  br.Close();
}
responseStream.Close();
captchaResponse.Close();
string base64String = Convert.ToBase64String(captcha_byte);

   var result = ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "CapMonsterModule=ZennoLab.universal");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1)
{
   return tmp[0];
}
return result;
Непонятно зачем использовать HttpWebRequest и хранение кук в переменной, если для всего этого есть свои методы и CookieContainer.
 
  • Спасибо
Реакции: ZX и Alex733
Все сделал по шагам, такая ошибка
kiss_2kb.1560405938.png


А подскажите пожалуйста такой же код , но для RuCaptcha ( или любой другой веншний сервис)
Ап, поддерживаю вопрос для АнтигЕйт
 
Ап, поддерживаю вопрос для АнтигЕйт
Держи я уже нашел
Код:
Развернуть Свернуть Копировать
//Отправка капчи из картинки
var captcha__get = project.Variables["captcha__get"].Value;
var image = System.Drawing.Image.FromFile(@captcha__get);
string base64String = String.Empty;
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
  image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
  byte[] imageBytes = ms.ToArray();
  base64String = Convert.ToBase64String(imageBytes);
}
var result = ZennoPoster.CaptchaRecognition("RuCaptcha.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;
RuCaptcha.dll меняешь на Anti-Captcha.dll ( под сервис который тебе надо)


Все получает, но ищу еще решение с POST запросом, отправки полученного значения на самом сайте.
 
  • Спасибо
Реакции: seodamage и Zoolone
Держи я уже нашел
Код:
Развернуть Свернуть Копировать
//Отправка капчи из картинки
var captcha__get = project.Variables["captcha__get"].Value;
var image = System.Drawing.Image.FromFile(@captcha__get);
string base64String = String.Empty;
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
  image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
  byte[] imageBytes = ms.ToArray();
  base64String = Convert.ToBase64String(imageBytes);
}
var result = ZennoPoster.CaptchaRecognition("RuCaptcha.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;
RuCaptcha.dll меняешь на Anti-Captcha.dll ( под сервис который тебе надо)
Респект, протестю + в карму :))))

Все получает, но ищу еще решение с POST запросом, отправки полученного значения на самом сайте.
 
как все же скачать картинку запросом с урла вида
Простейший вариант -
lHkRDbd.png
В переменной path будет путь к файлу.
Дальше переименовать в *.jpg (если потребуется).
 
Последнее редактирование:
  • Спасибо
Реакции: elakeri
Простейший вариант -
lHkRDbd.png
В переменной path будет путь к файлу.
Дальше переименовать в *.jpg (если потребуется).
))), а я плясал вокруг этого .php, просто оказ расширение махнуть.. спасибо
 
Пытаюсь спарсить капчу через ГЕТ запрос - но ее там нет

Если парсить через DOM страницы - все есть

Ка быть???

В гет запросе приходит такое
C#:
Развернуть Свернуть Копировать
                            <span class="img-captcha">
                                                                <img class="control" src="img/hk/0.gif" width="68" height="25" alt="" />
                                <a href="#refresh" class="refresh" title="обновить" onclick="return false;"><img src="img/arrow_refresh.png" alt="обновить" /></a>
                            </span>

Через DOM
C#:
Развернуть Свернуть Копировать
                                                                <img class="control" src="/captcha/captcha.php?rnd=0.2736579265950081" alt="" height="25" width="68">
                                <a href="#refresh" class="refresh" title="обновить" onclick=""><img src="img/arrow_refresh.png" alt="обновить"></a>
                            </span>
 
Последнее редактирование:

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