Проект для распознавания Google ReCAPTCHA 2 с помощью ruCaptcha для ZennoPoster 5

  • Автор темы Автор темы Lord_Alfred
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.
Пошагово тестите шаблоны в проект мейкере и смотрите где проблемы. При желании с вк можно вообще работать без веба.
 
Без веба банит, работает только решение с аудио, при работе с картинками передаются пустой id капчи и ошибки размера изображения, с аудио все ок
 
Ну потому что изображение скорее всего не может из html кода получить. Надо просто теги смотреть и менять их и всё.
 
Наверняка вы правы
 
Ну потому что изображение скорее всего не может из html кода получить. Надо просто теги смотреть и менять их и всё.

Привет! Пользуюсь твоим шаблоном по разгадке аудио, за который тебе огромнейшенее спасибо! Но иногда при правильной разгадке аудио гугл просит разгадать ещё, и ещё, и ещё, и так может быть до бесконечности. Хотя ответы даю правильные на аудио файл. В чем может быть проблема?
 
Привет! Пользуюсь твоим шаблоном по разгадке аудио, за который тебе огромнейшенее спасибо! Но иногда при правильной разгадке аудио гугл просит разгадать ещё, и ещё, и ещё, и так может быть до бесконечности. Хотя ответы даю правильные на аудио файл. В чем может быть проблема?
Там ограничение стоит на 5 разгадываний и если за 5 раз не разгадало, выдает ошибку, так что до бесконечности гадать не должно
 
Там ограничение стоит на 5 разгадываний и если за 5 раз не разгадало, выдает ошибку, так что до бесконечности гадать не должно

А что дороже разгадывать? аудио или фото рекаптчу?
 
  • Спасибо
Реакции: AlexGoodWeb
Разгадываем ReCaptcha 2
Нужна помощь в тестировании
Прошу в тему
 
  • Спасибо
Реакции: AlexGoodWeb
тестирую ваш скрипт recaptcha2.xmlz
в мониторинге https://rucaptcha.com/statistics/realtime_monitor не вижу присланных капчей,
в чем может быть проблема?
в настройках ZP captcha KEY прописан правильно
http://joxi.ru/ZrJOVYki1LYYEm.jpg

уточните пожалуйста работает сейчас этот скрипт?
 
del
 
Последнее редактирование:
тестирую ваш скрипт recaptcha2.xmlz
в мониторинге https://rucaptcha.com/statistics/realtime_monitor не вижу присланных капчей,
в чем может быть проблема?
в настройках ZP captcha KEY прописан правильно
http://joxi.ru/ZrJOVYki1LYYEm.jpg

уточните пожалуйста работает сейчас этот скрипт?
все работает, поэтапно смотрите как сохраняет картинку и что отправляет
 
Всем доброго времени суток!

Столкнулся с ситуацией, что мне нужно распознать recaptcha2 от гугла, узнал что это могут делать в рукапче и сразу принялся за поиск на форуме и за его пределами легкого проекта для интеграции себе, или готового сниппета для распознавания. Но, к сожалению, ни один из найденных проектов мне не понравился, потому что он не решал задачу распознания полностью. Если быть точнее, то некоторые проекты вообще не работали или нуждались в очень сильной доработке напильником :de:.

Именно поэтому было решено сделать свой сниппет для отгадывания данного вида капчи, который учел бы все мои желания и превзошел бы все существующие реализации. Такой сниппет, чтобы его можно было запускать как "проект в проекте", чтобы и выложить на форум и показать друзьям не стыдно :D.

Вот список того, что я реализовал:
  1. Есть демка, по которой понятно как работает моя реализация.
  2. Всё работает как подпроект, то есть править вам внутри сниппета ничего не нужно, просто прикрепить кубик "Проект в проекте" и указать путь к этому сниппету.
  3. Будет отправка русских капч. Конечно, если вы не забудете добавить нужный блок, в демо есть пример, а в самом сниппете описано как и куда их добавлять. (Почему важно отправлять русские капчи? - Потому что работники в ruCaptcha русские, они будут быстрее и правильнее отгадывать их).
  4. Проект сжимает отправляемое изображение с помощью C#, что позволяет обходить багу с максимальным размером загружаемого файла. Потому что если просто отправлять данную капчу, то она будет размером более разрешенных 400 КБ (потому что zennoposter сохраняет элемент в png-картинку без сжатия).
  5. Есть проверка на возврат от zenno строки "sorry" (когда что-то при распознавании пошло не так и зенка не дождалась результата).
  6. Реализована возможность показать скрытую капчу. Recaptcha2 скрывается через 30-40 секунд и если работник долго распознает, то потом при клике на капчу всё отвалится, хотя капча распознана, деньги сняты, работник распознал её правильно, а вы получайте от этого всего батхерд.
  7. Включена "качественная эмуляция" кликов: иногда при распознании таких капч зенка не кликает по элементам, поэтому получается опять батхерд.
  8. Сделана коррекция возвращаемых значений, то есть они уменьшаются на 1, т.к. индекс в этой капче от 0, а в рукапче от 1.
  9. Есть проверка на то, сколько раз уже вводилась капча, чтобы не получилось зацикливания и всё не умерло к чертям, ещё и сожрав кучу денег.
  10. В сниппете местами расписаны комментарии о том, что происходит - он очень прост к изменению и пониманию.
  11. Есть проверка на то, что изображение всё таки не нужно распознавать, если IP чистый и в гуглокапче сразу же ставится нужный чекбокс без отображения картинки.
  12. Сделана проверка всех 3х типов ошибок у капчи с отправкой запроса в рукапчу о том, что капча распознана не правильно. Виды ошибок у рекапчи:
    • нужно ввести капчу ещё раз, предыдущая капча была правильная, но гугл думает что это всё равно бот и хочет второй-третий раз правильный ввод (если IP заспамленный). Также такая ошибка бывает при неправильном распознании;
    • нужно выбрать ещё 1 изображение на капче, работник не выбрал ещё одно изображение;
    • нужно выбрать ещё несколько изображений на капче.

Ну, как?
Заманчиво, не так ли? Так скорее качайте и используйте :ay:.
Я специально сделал всё это, чтобы эксклюзивно выложить здесь на форуме :bz:.

Ссылка для скачивания: https://yadi.sk/d/kKmmhA8KjgkN6


PS: опубликовал именно в этом разделе, потому что в последнее время раздел "сниппеты" стал больше похож на раздел "вопросы".
У тебя есть кубик в шаблоне на C#, скажи пожалуйста что в него нужно дописать чтобы он передавал 2 параметра в рукапчу recaptchacols и
recaptcharows ? Мне в этом кубике вообще не разобраться.
 
у меня предлагает ввести капчу в ручную что зделать ?
 
После того, как распознал (с 3 раза) еще 2 раза отправил запросы:

iw3f3b.png
 
Подскажите шаблон, если есть.
разгадывания рекапчи, которую надо несколько раз нажимать, то есть например спрашивает про "показать витрины магазина", когда нажимаешь на картинку, за ней появляется еще одна.

как такую гадать?
 
Подскажите шаблон, если есть.
разгадывания рекапчи, которую надо несколько раз нажимать, то есть например спрашивает про "показать витрины магазина", когда нажимаешь на картинку, за ней появляется еще одна.
как такую гадать?
продаю, подробности в ссылке в подписи
 
Тема еще жива?
 
для картинок должен работать шаблон
 
для картинок должен работать шаблон
http://zennolab.com/discussion/threads/recaptcha-2-vs-zennoposter-ili-kak-bot-stal-chelovekom.27680/ вот эти работают на ура.
Вроде, в этой теме еще было решение, когда каптчу через манки.длл гадать можна. 2 раза пролистал - ничего, поиск тоже не помог. Может кто может направить на путь истинный?
 
В этой теме точно про monkey.dll ничего нету
 
  • Спасибо
Реакции: Nord
не стал читать 100500 сообщений внутри, ибо прочитал первое ..., скачал ( https://yadi.sk/d/kKmmhA8KjgkN6 ) работает. передвинул 2 кубика местами заработало еще лучше, конечно может решение амибоса лучше и пр . но судя по фри версии от выше указанного атора, решение лорда альфреда , понравилось больше , понятно что куда и можно допливать , вот ...
если написал что то не то из за отвия/ненадобности информации размещенной между первой и последней страницей, то so sorry
 
http://zennolab.com/discussion/threads/recaptcha-2-vs-zennoposter-ili-kak-bot-stal-chelovekom.27680/ вот эти работают на ура.
Вроде, в этой теме еще было решение, когда каптчу через манки.длл гадать можна. 2 раза пролистал - ничего, поиск тоже не помог. Может кто может направить на путь истинный?
Код:
Развернуть Свернуть Копировать
// ==================== Все что нужно настроить ========================================
bool extendAlerts = true; // true - выводить сообщения в лог ZennoPoster
string alertTitleLog = "Google ReCaptcha:"; // Заголовок перед сообщением в логе
string captchaModule = "MonkeyEnter.dll";   // Можно RuCaptcha.dll или MonkeyEnter.dll
int checkElementTimeout = 10; // Время, в течении которого ищем элементы на странице
int captchaLoadTimeout = 5;   // Время ожидания загрузки формы с картинками
int checkCaptchaCount = 4;       // Количество попыток разгадывания
// =====================================================================================

// ========== Цикл по количеству попыток разгадывания капчи ==========
for (int i = 0; i < checkCaptchaCount; i++)
{
    project.SendInfoToLog("Разгадываем капчу. Попытка " + Convert.ToString(i + 1) + "/" + checkCaptchaCount, alertTitleLog, extendAlerts);
   
    // ========== Цикл по времени поиска элемента recaptcha-checkbox на странице ==========
    for (int j = 0; j < checkElementTimeout * 2; j++)
    {
        System.Threading.Thread.Sleep(500);
       
        // ========== Кликаем ReCaptcha checkbox ==========
        HtmlElement reCaptcha_checkbox = instance.ActiveTab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
        if (!reCaptcha_checkbox.IsNull && !reCaptcha_checkbox.IsVoid)
        {
            reCaptcha_checkbox.Click();
            break;
        }
       
        if (j == checkElementTimeout * 2 - 1)
        {
            project.SendWarningToLog("Время поиска элемента истекло. Не найден элемент <recaptcha-checkbox>", alertTitleLog, extendAlerts);
            throw new Exception();
        }
    }
    // ========== Проверяем нужные элементы после клика ==========
    string reCaptcha_isChecked = string.Empty; // Состояние чекбокса. false - значит нужно разгадывать картинки
    HtmlElement imgForm = null;
    //HtmlElement imgText = null;
    string imgText = string.Empty;
    bool oldRecaptcha = false;
   
    for (int j = 0; j < checkElementTimeout * 2; j++)
    {
        System.Threading.Thread.Sleep(500);
       
        // ========== Получаем состояние чекбокса ==========
        HtmlElement reCaptcha_checked = instance.ActiveTab.FindElementByAttribute("span", "id", "recaptcha-anchor", "regexp", 0);
        if (!reCaptcha_checked.IsNull && !reCaptcha_checked.IsVoid)
        {
            reCaptcha_isChecked = reCaptcha_checked.GetAttribute("aria-checked");
            if (reCaptcha_isChecked == "true")
                break;
        }
       
        // ========== Ищем форму с картинками на странице ==========
        imgForm = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-payload", "regexp", 0);
        var imgs = instance.ActiveTab.FindElementsByAttribute("div", "class", "rc-imageselect-checkbox", "regexp");
        if (!imgs.IsVoid && !imgForm.IsNull && !imgForm.IsVoid && imgs.Count > 0)
        {
            if (captchaModule == "RuCaptcha.dll" && imgs.Count == 16)
            {
                imgForm = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-challenge", "regexp", 0);
                var heText = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-desc", "regexp", 0);
                imgText = Regex.Replace(heText.GetAttribute("innerhtml"), "<[^>]+>", string.Empty);
                if (imgText == "")
                {
                    heText = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-desc-no-canonical", "regexp", 0);
                    imgText = Regex.Replace(heText.GetAttribute("innerhtml"), "<[^>]+>", string.Empty);
                }   
            }
            else
            {
                oldRecaptcha = true;
                imgForm = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-payload", "regexp", 0);
            }
            break;
        }
    }
   
    if (reCaptcha_isChecked != "true")
        System.Threading.Thread.Sleep(captchaLoadTimeout * 1000); // Делаем паузу, ждем пока подгрузятся картинки
   
    // ========== Разгадываем капчу ==========
    string recognition_Result = string.Empty; // Результат разгадывания
    string recognition_WrongCaptcha = string.Empty; // Ссылка для возврата ошибки на сервис RuCaptcha.com
    if (reCaptcha_isChecked == "false")
    {
        // Проверяем попалась ли капча с одной картинкой
        if (imgForm.IsVoid)
        {
            project.SendInfoToLog("Не найдена форма с картинками. Скорее всего вылезла старая капча.", alertTitleLog, extendAlerts);
            break;
        }
       
        // Снимаем отметки с картинок
        var imgs = instance.ActiveTab.FindElementsByAttribute("div", "class", "rc-imageselect-checkbox", "regexp");
        if (!imgs.IsVoid)
        {
            for (int k = 0; k < imgs.Count; k++)
            {
                string width = imgs.GetByNumber(k).GetAttribute("width");
                if (width != "" && width != "0")
                    imgs.GetByNumber(k).Click();
            }
        }
       
        // Скриним форму с картинками и конвертируем в jpg
        string attribute = imgForm.DrawToBitmap(false);
        MemoryStream ms = new System.IO.MemoryStream(Convert.FromBase64String(attribute));
        Image bmp = new Bitmap(ms);
        var msJpeg = new System.IO.MemoryStream();
        string jpeg = string.Empty;
        if (captchaModule == "MonkeyEnter.dll" || oldRecaptcha)
        {
            bmp.Save(msJpeg, System.Drawing.Imaging.ImageFormat.Jpeg);
        }
        else
        {
                Image imgNew = new Bitmap(600, 600);
                var g = Graphics.FromImage(imgNew);
                g.DrawImage(bmp, 0, 0, 600, 600);
                g.Dispose();
                imgNew.Save(msJpeg, System.Drawing.Imaging.ImageFormat.Jpeg);
                imgNew.Dispose();
        }
        jpeg = Convert.ToBase64String(msJpeg.ToArray());
        bmp.Dispose();
       
        // Отправляем на распознавание
        project.SendInfoToLog("Отправляем данные на сервис распознавания", alertTitleLog, extendAlerts);
       
        string answer = string.Empty;
        if (captchaModule == "MonkeyEnter.dll" || oldRecaptcha)
            answer = ZennoPoster.CaptchaRecognition(captchaModule, jpeg, "id_constructor=23");
        else
            answer = ZennoPoster.CaptchaRecognition(captchaModule, jpeg, "textinstruction=" + imgText + "&recaptcha=1");
       
        // Приводим результат распознавания к нужному виду
        if (captchaModule == "RuCaptcha.dll")
        {
            // Разделяем ответ от RuCaptcha и складыванем в переменные
            var split = answer.Split(new [] { "-|-" }, StringSplitOptions.RemoveEmptyEntries);
            if (split.Length == 2)
            {
                recognition_Result = split[0];
                recognition_WrongCaptcha = split[1];
            }
            else
            {
                project.SendInfoToLog("Error: не удалось разгадать капчу", alertTitleLog, extendAlerts);
                continue;
            }
           
            // Проверяем ответ sorry
            if (recognition_Result == "sorry")
            {
                project.SendInfoToLog("Капча не распознана. RuCaptcha: sorry", alertTitleLog, extendAlerts);
                continue;
            }
           
            // Обрезаем начало ответа, оставляем только номера картинок, разделенные /
            recognition_Result = Regex.Match(recognition_Result, @"(?<=click:).*").Value;
        }
        else
            recognition_Result = answer;
       
        // Отображаем скрывшуюся капчу
        var e = instance.ActiveTab.FindElementByAttribute("div", "outerhtml", "z-index: 20000000", "regexp", 0);
        e.SetAttribute("style", "display: block; visibility: visible; position: absolute; width: 414px; left: 0px; top: 0px; height: 600px; z-index: 2000000000;");
       
        // ===== Кликаем =====
        do
        {
            // Выдераем номера картинок и кликаем по ним
            // Проверяем тип ответа
            string img_split = Regex.Match(recognition_Result, @"/").Value;
            if (img_split != "")
            {
                if (Regex.Match(recognition_Result, @"/$").Value == "")
                    recognition_Result += "/";
                img_split = Regex.Match(recognition_Result, @"^\d{1,2}(?=/)").Value;
                if (img_split == "")
                    img_split = Regex.Match(recognition_Result, @"^\d{1,2}").Value;
                if (img_split == "")
                    recognition_Result = Regex.Match(recognition_Result, @"(?<=^/).*").Value; // обрезаем разделитель / в начале строки
                else
                {
                    recognition_Result = Regex.Match(recognition_Result, @"(?<=^\d{1,2}/).*").Value; // обрезаем число и разделитель / в начале строки
                }
            }
            else
            {
                img_split = Regex.Match(recognition_Result, @"^\d{1}").Value;
                recognition_Result = Regex.Match(recognition_Result, @"(?<=^\d{1}).+").Value;
            }
           
            // Получаем картинку и кликаем
            string width = "0";
            HtmlElement img = instance.ActiveTab.FindElementByAttribute("img", "class", "rc-image-tile-4", "regexp", Convert.ToInt32(img_split) - 1);
            if (img.IsVoid)
            {
                img = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-image-tile-target", "regexp", Convert.ToInt32(img_split) - 1);
                if (img.IsVoid)
                    img = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-image-tile-wrapper", "regexp", Convert.ToInt32(img_split) - 1);
            }
            img.Click();
            System.Threading.Thread.Sleep(500);
        }
        while (recognition_Result != "");
       
        // ========= Подтверждаем =========
        var verify_button = instance.ActiveTab.FindElementByAttribute("div", "id", "recaptcha-verify-button", "regexp", 0);
        if (!verify_button.IsVoid && !verify_button.IsNull)
        {
            verify_button.Click();
        }
   
        // ========== Проверяем разгадали ли ==========
        string captchaError = string.Empty; // Тип ошибки
        reCaptcha_isChecked = string.Empty; // Состояние чекбокса. false - значит нужно разгадывать картинки
        for (int j = 0; j < 10; j++)
        {
            System.Threading.Thread.Sleep(500);
           
            // Получаем состояние чекбокса
            HtmlElement reCaptcha_checked = instance.ActiveTab.FindElementByAttribute("span", "id", "recaptcha-anchor", "regexp", 0);
            if (!reCaptcha_checked.IsNull && !reCaptcha_checked.IsVoid)
            {
                reCaptcha_isChecked = reCaptcha_checked.GetAttribute("aria-checked");
                if (reCaptcha_isChecked == "true")
                    break;
            }
           
            string textDom = instance.ActiveTab.DomText;
           
            // Получаем ошибку
            captchaError = Regex.Match(textDom, @"(?<=<div\ class=""rc-imageselect-error-select-one""\ style="").*?(?="">)").Value;
            if (captchaError == "")
            {
                captchaError = "1";
                break;
            }
            captchaError = Regex.Match(textDom, @"(?<=<div\ class=""rc-imageselect-error-select-more""\ style="").*?(?="">)").Value;
            if (captchaError == "")
            {
                captchaError = "2";
                break;
            }
            captchaError = Regex.Match(textDom, @"(?<=<div\ class=""rc-imageselect-incorrect-response""\ style="").*?(?="">)").Value;
            if (captchaError == "")
            {
                captchaError = "3";
                break;
            }
        }
       
        // ========= Отправляем ошибки на RuCaptcha =========
        if (reCaptcha_isChecked == "false")
        {
            if (captchaModule == "RuCaptcha.dll")
                    ZennoPoster.HttpGet(recognition_WrongCaptcha, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, 30000, "", "", true, 5, AdditionalHeaders: new [] {"Referer: "+ ""});
           
            if (captchaError == "1")
                project.SendInfoToLog("Капча разгадана не верно! Нужно указать еще одно изображение.", alertTitleLog, extendAlerts);
            if (captchaError == "2")
                project.SendInfoToLog("Капча разгадана не верно! Нужно указать больше изображений.", alertTitleLog, extendAlerts);
            if (captchaError == "3")
                project.SendInfoToLog("Капча разгадана не верно! Нужно попытаться еще.", alertTitleLog, extendAlerts);
            continue;
        }
    }
   
    // ========= Все ОК =========
    project.SendInfoToLog("Капча успешно разгадана!", alertTitleLog, extendAlerts);
    return "ok";
}

// Количество попыток разгадывания превышено, завершаем экшен по неудаче
throw new Exception();
 
  • Спасибо
Реакции: vertigo141
http://zennolab.com/discussion/threads/recaptcha-2-vs-zennoposter-ili-kak-bot-stal-chelovekom.27680/ вот эти работают на ура.
Вроде, в этой теме еще было решение, когда каптчу через манки.длл гадать можна. 2 раза пролистал - ничего, поиск тоже не помог. Может кто может направить на путь истинный?
нет, через манки.длл я не делал, там только через рукапчу, так как на ней есть поддержка ответа, что капча решена
 
блин, помогите разобраться как работает разгадывание капчи, нихера не понимаю.что и как нужно настроить, чтоб капча с вк разгадывалась. если кому не трудно, разъясните пожалуйста...тут пишут, что все работает.согласен, у меня руки из ж..пы, но и опыта мало...
 
Статус
В этой теме нельзя размещать новые ответы.

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