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

Бишип

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

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

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

П.С. Прошу строго не судить, только разбираюсь работе полностью без браузера.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
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. Получаете ответ в перенную, которую выберите в свойствах кубика:

 
  • Спасибо
Реакции: metal и Бишип

Бишип

Новичок
Регистрация
10.01.2019
Сообщения
5
Благодарностей
0
Баллы
1
2. В переменной captcha_file должен быть полный путь к файлу - каптче.
То есть я сначала скачиваю картинку капчи на диск, а затем прописываю путь к картинке в этой переменной?
Или я не правильно понял?
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 649
Благодарностей
653
Баллы
113
То есть я сначала скачиваю картинку капчи на диск, а затем прописываю путь к картинке в этой переменной?
Или я не правильно понял?
Вот код чтоб не скачивать по ссылке на комп, а сразу слать, хорошие люди поделились в свое время:

Код:
//Добавить 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 замени на свое
 

Бишип

Новичок
Регистрация
10.01.2019
Сообщения
5
Благодарностей
0
Баллы
1
Вот код чтоб не скачивать по ссылке на комп, а сразу слать, хорошие люди поделились в свое время:

Код:
//Добавить 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 замени на свое
Поменял ссылку на капчу и разгадывание через капмонстр:



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



Подскажите, что ещё нужно подправить?
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
316
Благодарностей
230
Баллы
43
Подправил код @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

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
Подправил код @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;
 
  • Спасибо
Реакции: Бишип

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 366
Благодарностей
3 292
Баллы
113
byte[] imageArray = System.IO.File.ReadAllBytes(project.Variables["captcha_file"].Value);
Можно получить картинку в байты без сохранения на диск через RequestBytes.
Всё же, лучше за практику взять throw new Exception("с сообщением об ошибке"), что бы хотя бы знать, на какой строчке она произошла в случае нескольких проверок.
 
Последнее редактирование:
  • Спасибо
Реакции: evgen_po и ibred

Бишип

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

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

ibred

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

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

Вложения

Бишип

Новичок
Регистрация
10.01.2019
Сообщения
5
Благодарностей
0
Баллы
1

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
Требуется внести небольшие правки в шаблон, который я скинул.

Найти:
C#:
ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "");
Заменить на:
C#:
ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64String, "CapMonsterModule=ZennoLab.universal");
Так как в этой каптчей другой шрифт и модуль Bitrix2 не подходит, а универсальный справляется на ура :-)

 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 649
Благодарностей
653
Баллы
113
Поменял ссылку на капчу и разгадывание через капмонстр:



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



Подскажите, что ещё нужно подправить?
Только Добавить using System.Net; , но у меня тоже ошибку выдал, может куки просто нужны быди под мою капчу.
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
316
Благодарностей
230
Баллы
43
Куки предварительно сохранить в переменной проекта 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*

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
Куки предварительно сохранить в переменной проекта 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.
 
  • Спасибо
Реакции: Yuriy Zymlex и Alex733

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113

timoharebet

Новичок
Регистрация
02.12.2018
Сообщения
10
Благодарностей
2
Баллы
3

Ikigai

Client
Регистрация
13.12.2016
Сообщения
275
Благодарностей
27
Баллы
28
  • Спасибо
Реакции: Zoolone

Zoolone

Banned
Регистрация
05.06.2019
Сообщения
141
Благодарностей
153
Баллы
43

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Zoolone какие-либо сделки.

Все сделал по шагам, такая ошибка


А подскажите пожалуйста такой же код , но для RuCaptcha ( или любой другой веншний сервис)
Ап, поддерживаю вопрос для АнтигЕйт
 

Ikigai

Client
Регистрация
13.12.2016
Сообщения
275
Благодарностей
27
Баллы
28
Ап, поддерживаю вопрос для АнтигЕйт
Держи я уже нашел
Код:
//Отправка капчи из картинки
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

Zoolone

Banned
Регистрация
05.06.2019
Сообщения
141
Благодарностей
153
Баллы
43

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 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 запросом, отправки полученного значения на самом сайте.
 

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18

dimafatality

Client
Регистрация
19.01.2014
Сообщения
266
Благодарностей
254
Баллы
63
как все же скачать картинку запросом с урла вида
Простейший вариант -
В переменной path будет путь к файлу.
Дальше переименовать в *.jpg (если потребуется).
 
Последнее редактирование:
  • Спасибо
Реакции: elakeri

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
Простейший вариант -
В переменной path будет путь к файлу.
Дальше переименовать в *.jpg (если потребуется).
))), а я плясал вокруг этого .php, просто оказ расширение махнуть.. спасибо
 

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
Последнее редактирование:

Igorst

Client
Регистрация
07.08.2011
Сообщения
188
Благодарностей
16
Баллы
18
Пытаюсь спарсить капчу через ГЕТ запрос - но ее там нет

Если парсить через 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>
 
Последнее редактирование:

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