Сниппет для решения Recaptcha 2 через rucaptcha.com (post/get)

  • Автор темы Автор темы amyboose
  • Дата начала Дата начала

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 311
Реакции
1 192
Баллы
113
Решил выложить свой сниппет для решения Рекапчи через запросы, так как сейчас уже все кому не лень его предлагают, вот только в открытом доступе не хотят выкладывать.

Код:
Развернуть Свернуть Копировать
Type type_rucaptcha = AppDomain.CurrentDomain.GetAssemblies().First(x => x.FullName.IndexOf("Rucaptcha", StringComparison.OrdinalIgnoreCase) != -1).GetType("ZennoLab.RuCaptcha.RuCaptchaConfigurator");
string rucaptcha_key = type_rucaptcha.GetMethod("get_SecretKey").Invoke(Activator.CreateInstance(type_rucaptcha), null).ToString();
string site_key = Regex.Match(instance.ActiveTab.DomText, @"(?<=api2/anchor\?k=).*?(?=&amp)").Value;
if (site_key == string.Empty)
    throw new Exception("google key не найден, задайте его вручную");
string domen = new Uri(instance.ActiveTab.URL).GetLeftPart(UriPartial.Authority);

System.Net.HttpWebRequest post_rucaptcha = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://rucaptcha.com/in.php");
post_rucaptcha.Proxy = null;
post_rucaptcha.AllowAutoRedirect = false;
post_rucaptcha.ContentType = @"multipart/form-data; boundary=--8d373f8bt2f4cf3";
post_rucaptcha.Method = "POST";
post_rucaptcha.ServicePoint.Expect100Continue = false;
post_rucaptcha.Timeout = 30000;

string content = string.Format(@"----8d373f8bt2f4cf3
Content-Disposition: form-data; name=""method""

userrecaptcha
----8d373f8bt2f4cf3
Content-Disposition: form-data; name=""soft_id""

1313
----8d373f8bt2f4cf3
Content-Disposition: form-data; name=""key""

" + rucaptcha_key + @"
----8d373f8bt2f4cf3
Content-Disposition: form-data; name=""googlekey""

" + site_key + @"
----8d373f8bt2f4cf3
Content-Disposition: form-data; name=""proxy""


----8d373f8bt2f4cf3
Content-Disposition: form-data; name=""pageurl""

" + domen + @"
----8d373f8bt2f4cf3--");

using (Stream reqStream = post_rucaptcha.GetRequestStream())
using (StreamWriter sw = new StreamWriter(reqStream))
    sw.Write(content);

string url_get;
using (System.Net.WebResponse resp = post_rucaptcha.GetResponse())
using (Stream respStream = resp.GetResponseStream())
using (StreamReader sr = new StreamReader(respStream))
{
    string resp_answer = sr.ReadToEnd();
    if (!resp_answer.Contains("OK|"))
        throw new Exception(resp_answer);
    url_get = "http://rucaptcha.com/res.php?key=" + rucaptcha_key + @"&action=get&id=" + resp_answer.Split('|')[1];   
}
Thread.Sleep(10000);

for (int z = 0; ;z++)
{
    System.Net.HttpWebRequest get_rucaptcha = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url_get);
    get_rucaptcha.Method = "GET";
    get_rucaptcha.Timeout = 30000;
    get_rucaptcha.Proxy = null;
    get_rucaptcha.AllowAutoRedirect = false;
    post_rucaptcha.ServicePoint.Expect100Continue = false;

  
    string response;
    using (System.Net.WebResponse resp = get_rucaptcha.GetResponse())
    using (Stream respStream = resp.GetResponseStream())
    using (StreamReader sr = new StreamReader(respStream))
       response = sr.ReadToEnd();

    if (response.Contains("OK|"))
    {
        instance.ActiveTab.FindElementById("g-recaptcha-response").SetValue(response.Split('|')[1], "None", false);
        break;
    }
    else if ((response != "CAPCHA_NOT_READY" && response != string.Empty) || z > 20)
        throw new Exception("не удалось решить рекапчу, ответ от сервиса: " + response);
    else
        Thread.Sleep(10000);
}
 
Последнее редактирование:
Это через сайткей или клик картинок?
 
Всё время получаю ошибку
11:14:57 Выполнение действия CSharp OwnCode ERROR_WRONG_USER_KEY

Хотя другие шаблоны работают с рукапчей нормально...
 
Всё время получаю ошибку
11:14:57 Выполнение действия CSharp OwnCode ERROR_WRONG_USER_KEY

Хотя другие шаблоны работают с рукапчей нормально...
Попробуй задать ключ вручную за место строки №2:
Код:
Развернуть Свернуть Копировать
string rucaptcha_key = "твой ключ";
 
string rucaptcha_key = "твой ключ";
сделал, так не получилось, та же ошибка идёт в логе - Выполнение действия CSharp OwnCode ERROR_WRONG_USER_KEY

и второй вопрос, я правильно понимаю что этим способом можно решить рекапчу2 без нажатия кнопки (т.е. автосабмит) ?
 
сделал, так не получилось, та же ошибка идёт в логе - Выполнение действия CSharp OwnCode ERROR_WRONG_USER_KEY
Эта ошибка означает, что не верно передается API-ключ от рукапчи. Он прописан в настройках зеннопостера?

и второй вопрос, я правильно понимаю что этим способом можно решить рекапчу2 без нажатия кнопки (т.е. автосабмит) ?
Нет.
 
Достаточно взять сниффер и посмотреть как отправляются данные, а потом от этого плясать. Странно, что у тебя проблемы, так как этот сниппет у всех, кому я давал его ранее работал.
 
Достаточно взять сниффер и посмотреть как отправляются данные, а потом от этого плясать. Странно, что у тебя проблемы, так как этот сниппет у всех, кому я давал его ранее работал.

Да я уже дважды пробовал отснифить, но так как не умею толку не вышло )
 
а версия зенки как-то влияет? а то у меня чёт тоже CSharp OwnCode ERROR_WRONG_USER_KEY хотя баланс и всё такое показывает
 
CSharp OwnCode ERROR_WRONG_USER_KEY аналогичная ситуация. версия 5.9.8.1
 
CSharp OwnCode ERROR_WRONG_USER_KEY аналогичная ситуация. версия 5.9.8.1
Значит вручную задай ключ таким образом:
Код:
Развернуть Свернуть Копировать
string rucaptcha_key = "242343fdgrt34gtg5h56h23423424";
 
Прописывал как вы говорите и ключ менял в рукапче уже сам ключ. Все равно эта ошибка. Незнаю,что происходит такое с сервисом или с зенкой
 
Отсниффай и закинь в личку отправляемый текст, посмотрю
 
В общем исправил код. Держите рабочий
Код:
Развернуть Свернуть Копировать
Type type_rucaptcha = AppDomain.CurrentDomain.GetAssemblies().First(x => x.FullName.IndexOf("Rucaptcha", StringComparison.OrdinalIgnoreCase) != -1).GetType("ZennoLab.RuCaptcha.RuCaptchaConfigurator");
string rucaptcha_key = type_rucaptcha.GetMethod("get_SecretKey").Invoke(Activator.CreateInstance(type_rucaptcha), null).ToString();
string site_key = Regex.Match(instance.ActiveTab.DomText, @"(?<=api2/anchor\?k=).*?(?=&amp)").Value;
if (site_key == string.Empty)
    throw new Exception("google key не найден, задайте его вручную");
string domen = new Uri(instance.ActiveTab.URL).GetLeftPart(UriPartial.Authority);

System.Net.HttpWebRequest post_rucaptcha = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://rucaptcha.com/in.php?key=" + rucaptcha_key + @"&method=userrecaptcha&googlekey=" + site_key + @"&pageurl=" + domen);
post_rucaptcha.Proxy = null;
post_rucaptcha.AllowAutoRedirect = false;
post_rucaptcha.Method = "GET";
post_rucaptcha.ServicePoint.Expect100Continue = false;
post_rucaptcha.Timeout = 30000;

string url_get;
using (System.Net.WebResponse resp = post_rucaptcha.GetResponse())
using (Stream respStream = resp.GetResponseStream())
using (StreamReader sr = new StreamReader(respStream))
{
    string resp_answer = sr.ReadToEnd();
    if (!resp_answer.Contains("OK|"))
        throw new Exception(resp_answer);
    url_get = "http://rucaptcha.com/res.php?key=" + rucaptcha_key + @"&action=get&id=" + resp_answer.Split('|')[1];
}
Thread.Sleep(10000);
for (int z = 0; ;z++)
{
    System.Net.HttpWebRequest get_rucaptcha_2 = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url_get);
    get_rucaptcha_2.Method = "GET";
    get_rucaptcha_2.Timeout = 30000;
    get_rucaptcha_2.Proxy = null;
    get_rucaptcha_2.AllowAutoRedirect = false;
    post_rucaptcha.ServicePoint.Expect100Continue = false;
    string response;
    using (System.Net.WebResponse resp = get_rucaptcha_2.GetResponse())
    using (Stream respStream = resp.GetResponseStream())
    using (StreamReader sr = new StreamReader(respStream))
       response = sr.ReadToEnd();
    if (response.Contains("OK|"))
    {
        instance.ActiveTab.FindElementById("g-recaptcha-response").SetValue(response.Split('|')[1], "None", false);
        break;
    }
    else if ((response != "CAPCHA_NOT_READY" && response != string.Empty) || z > 20)
        throw new Exception("не удалось решить рекапчу, ответ от сервиса: " + response);
    else
        Thread.Sleep(10000);
}
 
  • Спасибо
Реакции: Сибиряк и spy107
В общем исправил код. Держите рабочий
Код:
Развернуть Свернуть Копировать
Type type_rucaptcha = AppDomain.CurrentDomain.GetAssemblies().First(x => x.FullName.IndexOf("Rucaptcha", StringComparison.OrdinalIgnoreCase) != -1).GetType("ZennoLab.RuCaptcha.RuCaptchaConfigurator");
string rucaptcha_key = type_rucaptcha.GetMethod("get_SecretKey").Invoke(Activator.CreateInstance(type_rucaptcha), null).ToString();
string site_key = Regex.Match(instance.ActiveTab.DomText, @"(?<=api2/anchor\?k=).*?(?=&amp)").Value;
if (site_key == string.Empty)
    throw new Exception("google key не найден, задайте его вручную");
string domen = new Uri(instance.ActiveTab.URL).GetLeftPart(UriPartial.Authority);

System.Net.HttpWebRequest post_rucaptcha = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://rucaptcha.com/in.php?key=" + rucaptcha_key + @"&method=userrecaptcha&googlekey=" + site_key + @"&pageurl=" + domen);
post_rucaptcha.Proxy = null;
post_rucaptcha.AllowAutoRedirect = false;
post_rucaptcha.Method = "GET";
post_rucaptcha.ServicePoint.Expect100Continue = false;
post_rucaptcha.Timeout = 30000;

string url_get;
using (System.Net.WebResponse resp = post_rucaptcha.GetResponse())
using (Stream respStream = resp.GetResponseStream())
using (StreamReader sr = new StreamReader(respStream))
{
    string resp_answer = sr.ReadToEnd();
    if (!resp_answer.Contains("OK|"))
        throw new Exception(resp_answer);
    url_get = "http://rucaptcha.com/res.php?key=" + rucaptcha_key + @"&action=get&id=" + resp_answer.Split('|')[1];
}
Thread.Sleep(10000);
for (int z = 0; ;z++)
{
    System.Net.HttpWebRequest get_rucaptcha_2 = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url_get);
    get_rucaptcha_2.Method = "GET";
    get_rucaptcha_2.Timeout = 30000;
    get_rucaptcha_2.Proxy = null;
    get_rucaptcha_2.AllowAutoRedirect = false;
    post_rucaptcha.ServicePoint.Expect100Continue = false;
    string response;
    using (System.Net.WebResponse resp = get_rucaptcha_2.GetResponse())
    using (Stream respStream = resp.GetResponseStream())
    using (StreamReader sr = new StreamReader(respStream))
       response = sr.ReadToEnd();
    if (response.Contains("OK|"))
    {
        instance.ActiveTab.FindElementById("g-recaptcha-response").SetValue(response.Split('|')[1], "None", false);
        break;
    }
    else if ((response != "CAPCHA_NOT_READY" && response != string.Empty) || z > 20)
        throw new Exception("не удалось решить рекапчу, ответ от сервиса: " + response);
    else
        Thread.Sleep(10000);
}
Ну можно и GET запросом слать, разницы никакой нету, но мне всегда больше нравился вариант с POST запросом.
 
Код:
Развернуть Свернуть Копировать
Content-Disposition: form-data; name=""soft_id""
1313

Это я как понял вы указываете свой id что б получать процент?

Попробую сегодня данный сниппет под anti-captcha переделать. Плюс ко всему есть соображения как сделать autosubmit на рекапче 2.0 Если все получится удачно, сюда выложу на пользование
 
Последнее редактирование:
Код:
Развернуть Свернуть Копировать
Content-Disposition: form-data; name=""soft_id""
1313

Это я как понял вы указываете свой id что б получать процент?

Попробую сегодня данный сниппет под anti-captcha переделать. Плюс ко всему есть соображения как сделать autosubmit на рекапче 2.0 Если все получится удачно, сюда выложу на пользование
Да, всё верно. Если мешает, можете убрать
 
Ребят, подскажите как вместо инстанса, это значение вывести в переменную либо в результат C#, нужно для GET / POST. ТС спасибо большое за сниппет. :-)
 
Вот значение:
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.FindElementById("g-recaptcha-response").SetValue(response.Split('|')[1], "None", false);
 
Вот значение:
Код:
Развернуть Свернуть Копировать
instance.ActiveTab.FindElementById("g-recaptcha-response").SetValue(response.Split('|')[1], "None", false);
Код:
Развернуть Свернуть Копировать
project.Variables["rucatptca_code"].Value = response.Split('|')[1];
 
Спасибо огромное, второй код от ezotonal работает у меня!
 
Спасибо огромное, второй код от ezotonal работает у меня!
Попробую сегодня данный сниппет под anti-captcha переделать. Плюс ко всему есть соображения как сделать autosubmit на рекапче 2.0 Если все получится удачно, сюда выложу на пользование
К anti-captcha не получилось прикрутить? :ah:
 
Спасибо огромное, второй код от ezotonal работает у меня!

К anti-captcha не получилось прикрутить? :ah:
Времени пока не могу найти...постараюсь в скором времени выложить
 
  • Спасибо
Реакции: Сибиряк

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