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

  • Автор темы Автор темы Lord_Alfred
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.
Он есть, вы плохо искали, правда разок вышли дорожные знаки, видимо, что-то палиться.
 
Ребята обновленного(рабочего) проекта не у кого нету? Последние два дня только 3х3 старые проходят,4х4 работнички с рукапчи разгадывают как попало(

Присоединяюсь!
Тоже беда.
А через аудио после некоторого времени на одном ip вобще непонятно что лезет.
Капмонстр с ума сходит!
 
Ребята, выручите сниппетом, который разгадывает эту ху№ню!!!

Держи у меня этот разгадывает чекбоксы, нашёл где-то на просторах вики по zenno сейчас уже и не вспомню где это, поэтому скидываю код C#

Код:
Развернуть Свернуть Копировать
// Основные параметры
// время ожидания
var waitTime = 1000;
// количество попыток распознать
var tryRecognize = 3;
// количество попыток загрузить элемент
var tryLoadElement = 60;
// получать полный ответ
bool fullAnswer = true;
// показывать сообщения о прогрессе распознавания
var needShowMessages = false;
// Вспомогательные переменные
// вкладка
var tab = instance.ActiveTab;
// вид рекаптчи 2 (с кнопкой "я не робот" или без)
bool isNewView = true;
// поздравляем, вы не робот
var success = false;
// время вышло
var timeout = false;
// задание для рекапчи 2
var task = string.Empty;
// url изображения
var src = string.Empty;
// картинка в base64
var imageString = string.Empty;
// ответ на каптчу
var answer = string.Empty;
// капча изменилась
var changed = false;
// пустой ответ
var answerIsEmpty = false;
// Проверка прохождения защиты
Action CheckOK= () => {
    System.Threading.Thread.Sleep(waitTime); // подождём загрузки элементов
    for (int k = 0; k < tryLoadElement; k++)
    {      
        var check = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
        var more = tab.FindElementByAttribute("div", "class", "rc-imageselect-error-select-more", "regexp", 0);
        var wrong = tab.FindElementByAttribute("div", "class", "rc-imageselect-incorrect-response", "regexp", 0);
        if (!more.IsVoid && !wrong.IsVoid)
        {
            var isNotVisibleMore = more.GetAttribute("outerhtml").Replace(" ","").Contains("display:none");
            var isNotVisibleWrong = wrong.GetAttribute("outerhtml").Replace(" ","").Contains("display:none");
            if (isNotVisibleMore && isNotVisibleWrong)
            {
                if (!check.IsVoid)
                {
                    if (check.OuterHtml.Contains("style=\"\""))
                    {
                        success = true;
                        break;
                    }
                }
                else System.Threading.Thread.Sleep(waitTime);
            }
            else break;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
};
Action UpdateImage= () => {
    // Обновляем капчу при необходимости
    if (!changed)
    {
        HtmlElement reload = null;
        if (isNewView) reload = tab.FindElementByAttribute("div", "id", "recaptcha-reload-button", "text", 0);
        else reload = tab.GetDocumentByAddress("0;0").FindElementByTag("form", 1).FindChildByAttribute("input:submit", "class", "fbc-button-reload fbc-button", "regexp", 0);
        if (!reload.IsVoid) reload.Click();
        else timeout = true;
    }
    changed = false;
    for (int k = 0; k < tryLoadElement; k++)
    {
        System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
        // ищем картинку
        var testImage = tab.FindElementByAttribute("img", "class", "rc-image-tile", "regexp", 0);
        if (testImage.IsVoid) continue;
        // получаем url изображания
        var newSrc = testImage.GetAttribute("src");
        // если изображение изменилось, то выходим
        if (newSrc != src) break;
        if (k == (tryLoadElement - 1)) timeout = true;
    }
};
// Поиск рекаптчи 2
Action SearchReCaptcha2= () => {
    project.SendInfoToLog("Поиск рекаптчи 2", needShowMessages);
    for (int k = 0; k < tryLoadElement; k++)
    {
        // поиск кнопки "Я не робот"
        var notRobot = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
        // если нашли
        if (!notRobot.IsVoid)
        {
            // клик по кнопке
            notRobot.Click();
            System.Threading.Thread.Sleep(waitTime); // подождём немного
            // если ввод каптчи не требуется
            var check = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
            if (!check.IsVoid)
            {
                if (check.OuterHtml.Contains("style=\"\""))
                {
                    success = true;
                    break;
                }
            }
            // Ждем пока загрузится форма
            for (int j = 0; j < tryLoadElement; j++)
            {
                var loadedForm = tab.FindElementByAttribute("div", "class", "primary-controls", "regexp", 0);
                if (!loadedForm.IsVoid) break;
                else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
                if (j == (tryLoadElement - 1)) timeout = true;
            }
            break;
        }
        else
        {
            // убеждаемся, что это мобильная версия рекапчи
            var form = tab.FindElementByAttribute("form", "fulltag", "form", "text", 0);
            if (!form.IsVoid)
            {
                isNewView = false;
                fullAnswer = false;
                break;
            }
            else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
};
// Поиск задания рекапчи 2
Action SearchTask= () => {
    project.SendInfoToLog("Поиск задания", needShowMessages);
    for (int k = 0; k < tryLoadElement; k++)
    {
        HtmlElement taskHe = null;
        if (isNewView) taskHe = tab.FindElementByAttribute("div", "class", "rc-imageselect-desc-wrapper", "regexp", 0);
        else taskHe = tab.FindElementByAttribute("label", "class", "fbc-imageselect-message-text", "regexp", 0);
        if (!isNewView && taskHe.IsVoid) taskHe = tab.FindElementByAttribute("div", "class", "fbc-imageselect-message-error", "regexp", 0);
        if (!taskHe.IsVoid)
        {
            task = taskHe.GetAttribute("innertext"); // получаем задание
            var suspecttask = task.ToLower();
            if (suspecttask.Contains("street signs") || suspecttask.Contains("указатели") || suspecttask.Contains("дорожні знаки"))
            {
                UpdateImage();
                continue;
            }
            break;  
        }
        else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
        if (k == (tryLoadElement - 1)) timeout = true;
    }
};
// Поиск изображения
Action SearchImage= () => {
    project.SendInfoToLog("Поиск изображения", needShowMessages);
    System.Threading.Thread.Sleep(waitTime * 3); // подождём загрузки элемента
    for (int k = 0; k < tryLoadElement; k++)
    {
        HtmlElement image = null;
        if (isNewView) image = tab.FindElementByAttribute("img", "class", "rc-image-tile", "regexp", 0);
        else  image = tab.FindElementByAttribute("img", "class", "fbc-imageselect-payload", "regexp", 0);
        // если есть изображение
        if (!image.IsVoid)
        {
            // получаем url изображания
            src = image.GetAttribute("src");
            imageString = image.DrawToBitmap(true);
            break;
        }
        else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
        if (k == (tryLoadElement - 1)) timeout = true;
    }
};
// Распознавание
Action Recognize= () => {
    project.SendInfoToLog("Распознавание", needShowMessages);
    if (!isNewView) fullAnswer = false;
    var answerString = ZennoPoster.CaptchaRecognition("Rucaptcha.dll", imageString, "id_constructor=23");
    var split = answerString.Split(new [] { "-|-" }, StringSplitOptions.RemoveEmptyEntries);
    answer = split[0];
};
//Вводим ответ
Action InputAnswer= () => {
    if (!String.IsNullOrEmpty(answer) && answer != "sorry")
    {
                project.SendInfoToLog("Ввод ответа и проверка правильности", needShowMessages);
        int count = 0;
        foreach (char c in answer)
        {
            if (fullAnswer)
            {
                if (count == 2) break;
            }
            int index;
            HtmlElement he = null;  
            if (isNewView)
            {
                index = Convert.ToInt32(c.ToString()) - 1;
                he = tab.FindElementByAttribute("img", "class", "rc-image-tile", "regexp", index);
            }
            else
            {
                string attrValue = "fbc-imageselect-checkbox-" + c;
                he = tab.FindElementByAttribute("input:checkbox", "class", attrValue, "regexp", 0);
            }
            if (!he.IsVoid)
            {
                he.Click(); //кликаем на картинку
                System.Threading.Thread.Sleep(waitTime);// подождём немного
            }
            if (fullAnswer) count++;
        }
        // ищем кнопку "Подтвердить"
        HtmlElement apply = null;
        if (isNewView) apply = tab.FindElementById("recaptcha-verify-button");
        else apply = tab.GetDocumentByAddress("0;_0").FindElementByTag("form", 0).FindChildByAttribute("input:submit", "fulltag", "input:submit", "text", 0);
        if (!apply.IsVoid) apply.Click();
      
        // проверим правильность ответа
        if (isNewView)
        {
            CheckOK();
            if (success) return;
            // вводим оставшуюся часть ответа
            if (fullAnswer)
            {
                for (int i = count; i < answer.Length; i++)
                {
                    // снова ищем картинку
                    var testImage = tab.FindElementByAttribute("img", "class", "rc-image-tile", "regexp", 0);
                    if (testImage.IsVoid) break;
                    // получаем url изображания
                    var newSrc = testImage.GetAttribute("src");
                    // если изображение изменилось, то выходим
                    if (newSrc != src) break;
                    else changed = true;
                    // иначе продолжаем ввод
                    int index = Convert.ToInt32(answer[i].ToString()) - 1;
                    var he = tab.FindElementByAttribute("img", "class", "rc-image-tile", "regexp", index);
                    if (!he.IsVoid)
                    {
                        he.Click();
                        System.Threading.Thread.Sleep(waitTime); // подождём немного
                        if (!apply.IsVoid) apply.Click();
                        CheckOK();
                        if (success) return;
                    }
                }
            }
        }
    }
    else answerIsEmpty = true;
};
// Дополнительные действия для старого вида рекапчи
Action ActsOldView= () => {
    System.Threading.Thread.Sleep(waitTime * 3); // подождём загрузки элемента
    // Проверяем, была ли ошибка в распознавании
    HtmlElement he = tab.FindElementByAttribute("img", "class", "fbc-imageselect-payload", "regexp", 0);
    if (!he.IsVoid)
    {
        return;
    }
    string txt = string.Empty;
    // ищем текст, который надо вставить
    for (int k = 0; k < tryLoadElement; k++)
    {
        HtmlElement heGetText = tab.FindElementByAttribute("textarea", "dir", "ltr", "regexp", 0);
        if (!heGetText.IsVoid)
        {
            txt = heGetText.GetAttribute("value");
            break;  
        }
        else
        {
            System.Threading.Thread.Sleep(waitTime); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    // ищем куда вставлять текст
    for (int k = 0; k < tryLoadElement; k++)
    {
        HtmlElement hePutText = tab.FindElementByAttribute("textarea", "id", "g-recaptcha-response", "regexp", 0);
        if (!hePutText.IsVoid)
        {
            hePutText.SetValue(txt, "None", false);
            break;  
        }
        else
        {
            System.Threading.Thread.Sleep(waitTime); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    // нажимаем "Подтвердить"
    for (int k = 0; k < tryLoadElement; k++)
    {
        var submit = tab.FindElementByAttribute("input:submit", "fulltag", "input:submit", "regexp", 0);
        if (!submit.IsVoid)
        {
            submit.Click();
            break;
        }
        else
        {
            System.Threading.Thread.Sleep(waitTime); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    success = true;
};
SearchReCaptcha2();
if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
for (int i = 0; i < tryRecognize; i++)
{
    SearchTask();
    if (timeout) break;
    SearchImage();
    if (timeout) break;
    Recognize();
    InputAnswer();
    if (answerIsEmpty)
    {
        answerIsEmpty = false;
        UpdateImage();
        continue;
    }
    if (!isNewView) ActsOldView();
    if (timeout) break;
    if (success) return "ok";
    if (i != (tryRecognize - 1)) UpdateImage();
    if (timeout) break;
}
if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
else throw new Exception("Не распознано. Закончились попытки распознать, прежде чем ответ был засчитан");
 
У кого нибудь разгадывает 2Х8?
 
Держи у меня этот разгадывает чекбоксы, нашёл где-то на просторах вики по zenno сейчас уже и не вспомню где это, поэтому скидываю код C#
Хороший сниппет, но он не отсылает инструкцию) и посылает просто картинку.(пробую доделать)
 
4х4 наверно кликают боты, всегда за одно время и накликано наобум.
 
Сейчас не отгадывает капчу 4х4 так как кто то говорил что ответы должны приходить в формате в разделителем 1/2/3/4 а сейчас они приходят так 1234
параметр recaptcha=1 не установлен
 
Держи у меня этот разгадывает чекбоксы, нашёл где-то на просторах вики по zenno сейчас уже и не вспомню где это, поэтому скидываю код C#
у меня не работает, CSharp OwnCode Входная строка имела неверный формат.
 
  • Спасибо
Реакции: Andi88
Плоховатенько снипет разгадывает, кажется, что гугл его палит. А как CAP Monster работает в рекапчой? А то школота не всегда верно кликает по фоткам, 50% неверно.
 
Такие разгадывает 100% с ошибкой!
2016-03-10_003430.jpg

Объясните почему снипет отрабатывает с ошибкой иногда, хотя капча разгаданна верно.
 
Последнее редактирование:
  • Спасибо
Реакции: AlexGoodWeb
Как разгадывать такие варианты REкапчи ?
Когда нужно правильно проставить галочки и после вставить полученный код в пустое поле ...

capcha1.png
capcha2.png
 
Очень долго разгадывает, есть снипет который позволил бы руками разгадать? 50-70% времени уходит на разгадывание это недопустимо!
 
Результаты теста: 3х3 - 11сек с первого раза (была английская подсказка), 4х4 - 13сек(через французский VPN) с первого раза. Для таких как я, с английским браузером по дефолту, при тестовых движениях с русской строкой подсказки, легче сразу прописать профиль в проекте (см. приложение)
Будет ли обновление сниппета ? На сегодня уже отрабатывает не всегда корректно, а некоторые виды капч не разгадывает вовсе.
 
Тоже проблема c 2X8. требует выбрать водоемы, озера.. капча отсылается на rucaptcha, обычно верно разгадывается, но выбор не фиксируется, а пишет, что посмотрите новые изображения или выполнить несколько заданий, второй раз с rucaptcha приходит обычно не верный ответ, если дальше пробовать в ручную разгадывать, результата обычно нет, выбор не фиксируется и снова одно и тоже. пробовал в ручную, если повезет, то второй раз вылезут дорожные знаки, с ними бывает норм проходит. хотелось бы организовать хотя бы с ручным вводом.
 
Вы должны выполнить несколько заданий = не нравится айпи
 
что это значит?)
 
вот никак не пойму какова.. вы заморачиваетесь по 4х4 и 2х4 ... я, к примеру, проверяю перед запуском скрипта, какую картинку выкинуло, и если это не 3х3, то обновляю капчу... но есть пара проблем:
1.если рукапча неправильно разгадала 3х3, то возможно рекапча выкинет и 4х4 и 2х4, а как нажать кнопку "обновить капчу" внутри кода я х.з. (ну не прогер я)..
2. это 3х3 с меняющимися картинками.. как их отлавливать я не знаю
 
Да бывает такое, рекапча закрылась, разгадалась, а снипет считает, что это не так, обычно после 3 попытки такое происходит.
 
вот никак не пойму какова.. вы заморачиваетесь по 4х4 и 2х4 ... я, к примеру, проверяю перед запуском скрипта, какую картинку выкинуло, и если это не 3х3, то обновляю капчу... но есть пара проблем:
1.если рукапча неправильно разгадала 3х3, то возможно рекапча выкинет и 4х4 и 2х4, а как нажать кнопку "обновить капчу" внутри кода я х.з. (ну не прогер я)..
2. это 3х3 с меняющимися картинками.. как их отлавливать я не знаю
просто нужно не заморачиваться с большим куском кода. Сделать вложенный проект на понятных и легкоредактируемых кубиках. И там всякие варианты наворачивать, если поведение рекаптчи начинает отличатся.
 
  • Спасибо
Реакции: blud
просто нужно не заморачиваться с большим куском кода. Сделать вложенный проект на понятных и легкоредактируемых кубиках. И там всякие варианты наворачивать, если поведение рекаптчи начинает отличатся.
как вариант
 
у нас кстати много раз на форуме поднимали тему типа общего репозитория сниппетов, всем делиться между собой и тд) вот он отличный пример, когда имея одну задачу и одну основу уже коллективным разумом бы получилось запилить общий вложенный проект. но пока что то никак( судя по сообщениям(

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

я бы сам поделился наработками, если бы были. я просто в своих схемах с каптчами вообще не взаимодействую, поэтому не тестил даже лично эту тему.
предлагаю дружить домами(с) "Москва слезам не верит"

а если серьезно, то действительно как то не оч. у нас коллективный разум ... где то пару недаль назад я описал(помоему в этой теме) как я отслеживаю и пропускаю 2х4 и 4х4, но помоему никто на это внимание не обратил и народ продолжает долбится в эти капчи ... что это.. мазохизм или .... я х.з.
 
  • Спасибо
Реакции: rostonix
Пропускает всё кроме стары
посмотрел ваш шаблон, вы считаете количество картинок в капче, и если их не девять, то обновить капчу... а если их девять, но это капча с заменяющимися картинками ?? .. 100% будет ошибка
сорри не досмотрел шаблон .... следующим кубиком проверка как раз на эти капчи ... изините
 
посмотрел ваш шаблон, вы считаете количество картинок в капче, и если их не девять, то обновить капчу... а если их девять, но это капча с заменяющимися картинками ?? .. 100% будет ошибка
+элемент текста "тыкайте пока не пропадёт бла бла бла", использовал данный сниппет успешно неделю, но обновлений капчи требуется много+ капч отправлять много, но пробивает
 
+элемент текста "тыкайте пока не пропадёт бла бла бла", использовал данный сниппет успешно неделю, но обновлений капчи требуется много+ капч отправлять много, но пробивает
Т.е. долго обновлять может по времени + приходится за один "пробив" оплачивать несколько разгадываний ? Правильно понял ? ... Или ?
 
Статус
В этой теме нельзя размещать новые ответы.

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