Recaptha 2 после аудио разгадки новая капча!

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
Начал работу. Понял, что нужно менять этот кусок кода.
Code:
// открытие аудиозадания
Action OpenAudioTask= () => {
    project.SendInfoToLog("Открываем форму с аудио заданием", needShowMessages);
    if (isNewView)
    {
        //проверяем тип задания формы
        var task = tab.FindElementByAttribute("div", "class", "rc-imageselect-desc-wrapper", "regexp", 0);
        if (!task.IsVoid) TryOpenAudioForm(); // найдено графическое задание, значит открываем аудио
    }
    else
    {
        var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
        if (!elem.IsVoid) elem.Click();
        tab.WaitDownloading();
        var errorElem = tab.FindElementByAttribute("div", "class", "fbc-message", "regexp", 0);
        if (!errorElem.IsVoid)
        {
            var attr = errorElem.GetAttribute("innertext");
            if (attr.Contains("Please enable JavaScript and/or update your browser to get an audio challenge"))
            {
                throw new Exception("Не получилось открыть вкладку с аудиозаданием, попробуйте изменить userAgent");
            }
        }
    }
};
Вот идентификатор текстовой капчи.
Code:
tab.FindElementByAttribute("div", "class", "rc-text-desc-wrapper", "regexp", 0);
 

feniks_06

Пользователь
Joined
Apr 10, 2016
Messages
39
Reaction score
2
Points
8
Очень жду Вашего решения :-)
 

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
Очень жду Вашего решения :-)
решение будет, т.к. данный шаблон мне жизненно необходим.
 

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
Тестируйте.

:ci:
Code:
// Основные параметры

// время ожидания
var waitTime = 350;
var waitTime2 = 2600;
// количество попыток распознать
var tryRecognize = 6;
// количество попыток загрузить элемент
var tryLoadElement = 30;
// показывать сообщения о прогрессе распознавания
var needShowMessages = false;
// проверять корректность распознанного ответа
var needToCheck = true;

// Вспомогательные переменные

// вкладка
var tab = instance.ActiveTab;
// поздравляем, вы не робот
var success = false;
// аудио файл
var file = string.Empty;
// файл был удален
var fileDeleted = true;
// ответ на аудио каптчу
var answer = string.Empty;
// новый вид рекаптчи 2
var isNewView = true;
// рекаптча 1
var isRecaptcha1 = false;
// время вышло
var timeout = false;
// ошибка загрузки файла
var fileLoadingError = false;
// cписок урлов скаченных файлов
var usedURLs = new List<string>();

// поиск кнопки открытия формы с аудио заданием
Action TryOpenAudioForm = () => {
    for (int k = 0; k < tryLoadElement; k++)
    {
        var audioButton = tab.FindElementByAttribute("div", "id", "recaptcha-audio-button", "regexp", 0);
        // если нашли
        if (!audioButton.IsVoid)
        {
            // клик по кнопке
            audioButton.Click();
            break;
        }
        System.Threading.Thread.Sleep(waitTime); // подождём немного
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    System.Threading.Thread.Sleep(waitTime); // подождём немного
};

// открытие аудиозадания
Action OpenAudioTask= () => {
    project.SendInfoToLog("Открываем форму с аудио заданием", needShowMessages);
    if (isNewView)
    {
        //проверяем тип задания формы
        var task = tab.FindElementByAttribute("div", "class", "rc-imageselect-desc-wrapper", "regexp", 0);
        if (!task.IsVoid) TryOpenAudioForm(); // найдено графическое задание, значит открываем аудио
    }
    else
    {
        var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
        if (!elem.IsVoid) elem.Click();

        tab.WaitDownloading();
        var errorElem = tab.FindElementByAttribute("div", "class", "fbc-message", "regexp", 0);
        if (!errorElem.IsVoid)
        {
            var attr = errorElem.GetAttribute("innertext");
            if (attr.Contains("Please enable JavaScript and/or update your browser to get an audio challenge"))
            {
                throw new Exception("Не получилось открыть вкладку с аудиозаданием, попробуйте изменить userAgent");
            }
        }
    }
};

// Определение версии рекапчи
Action NotRobotClick= () => {
    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
        {
            // проверяем наличие аудио кнопки рекаптчи 1
            HtmlElement r1 = tab.FindElementById("recaptcha_switch_audio");
            if (!r1.IsVoid)
            {
                r1.Click();
                isRecaptcha1 = true;
                break;
            }

            // проверяем вид рекаптчи2
            var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
            if (!elem.IsVoid)
            {
                isNewView = false;
                break;
            }
            System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
};

// скачиваем mp3-файл
Action GetAudioFile= () => {

    var href = String.Empty;

    // получаем аудио задание
    for (int k = 0; k < tryLoadElement; k++)
    {
        if (isRecaptcha1)
        {
            var audioChallenge = tab.FindElementByAttribute("a", "id", "recaptcha_audio_download", "text", 0);
            // если нашли, получаем ссылку на аудио файл
            if (!audioChallenge.IsVoid)
            {
                href = audioChallenge.GetAttribute("href");
                break;
            }
            else System.Threading.Thread.Sleep(waitTime);
        }
        else
        {
            if (isNewView)
            {
                var audioChallenge = tab.FindElementByAttribute("a", "class", "rc-audiochallenge-download-link", "regexp", 0);
                // если нашли, получаем ссылку на аудио файл
                if (!audioChallenge.IsVoid)
                {
                    href = audioChallenge.GetAttribute("href");
                    break;
                }
                else; // подождём загрузки элемента
                var noaudio = tab.FindElementByAttribute("div", "id", "recaptcha-reload-button", "regexp", 0);
                noaudio.Click();
                System.Threading.Thread.Sleep(waitTime);
                project.SendInfoToLog("Обходим текстовую капчу", needShowMessages);
            }
            else
            {
                var audioChallenge = tab.FindElementByAttribute("audio", "class", "fbc-audio-controls", "regexp", 0);
                // если нашли, получаем ссылку на аудио файл
                if (!audioChallenge.IsVoid)
                {
                    href = audioChallenge.FindChildByAttribute("source", "src", ".mp3", "text", 0).GetAttribute("src");
                    href = "https://www.google.com" + href;
                    break;
                }
                else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
            }
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }

    foreach (var usedUrl in usedURLs)
    {
        if (usedUrl.Contains(href))
            throw new Exception("Отсутствует новый аудио файл");
    }
    usedURLs.Add(href);

    project.SendInfoToLog("Скачиваем аудио файл", needShowMessages);
    try
    {
        var proxy = instance.GetProxy();
        var respType = ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.File;
        var timeoutRequest = 30000;
        var cookies = instance.GetCookie("google.com", true);
        var userAgent = project.Profile.UserAgent;
        var maxRedirectCount = 1;
        var downloadPath = project.Directory + "\\audiofiles";
        file = ZennoPoster.HttpGet(href, proxy, "UTF8", respType, timeoutRequest, cookies, userAgent, false, maxRedirectCount, null, downloadPath);
        fileDeleted = false;
    }
    catch (Exception ex)
    {
        throw new Exception("Не удалось скачать аудио файл");
    }
};

Action Recognize= () => {
    project.SendInfoToLog("Распознаем", needShowMessages);
    try
    {
        if (!File.Exists(file))
        {
            fileLoadingError = true;
            fileDeleted = true;
            return;
        }
        var bytes = File.ReadAllBytes(file);
        if (bytes.Length < 1024)
        {
            fileLoadingError = true;
            return;
        }
        string str = Convert.ToBase64String(bytes);
        var rc = ZennoPoster.CaptchaRecognition("CapMonster2.dll", str, "CapMonsterModule=ZennoLab.AudioReCaptcha&ParallelMode=true");
        answer = rc.Split(new [] {"-|-"}, StringSplitOptions.RemoveEmptyEntries)[0];
                if (answer.Contains("133193320491090004119440")) throw new Exception("Your IP was banned!");
    }
    finally
    {
        if (File.Exists(file))
       {
            File.Delete(file);
            fileDeleted = true;
        }
    }
};

Action InputAnswer= () => {
    if (!String.IsNullOrEmpty(answer) && answer != "sorry")
    {
        project.SendInfoToLog("Вводим ответ", needShowMessages);
        HtmlElement audioAnswerInput = null;
        // ищем поле для ввода ответа
        if (isRecaptcha1)
        {
            audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "recaptcha_response_field", "text", 0);
        }
        else
        {
            if (isNewView) audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "audio-response", "regexp", 0);
            else audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "response", "text", 0);
        }

        // если нашли
        if (!audioAnswerInput.IsVoid)
        {
            // вводим ответ
            audioAnswerInput.SetValue(answer, "None", false);
        }

        // подождём немного
        System.Threading.Thread.Sleep(waitTime);
    }
    else throw new Exception("Ответ не получен");
};

// Подтверждаем
Action SubmitAnswer= () => {
    // ищем кнопку "Подтвердить"
    HtmlElement apply = null;
    if (isNewView) apply = tab.FindElementById("recaptcha-verify-button");
    else apply = tab.FindElementByAttribute("div", "class", "fbc-button-verify", "regexp", 0).FindChildByAttribute("input:submit", "fulltag", "input:submit", "text", 0);

    if (!apply.IsVoid) apply.Click();

    // подождём немного
    System.Threading.Thread.Sleep(waitTime2);
};

// Проверяем правильность для старого вида рекапчи 2
Action CheckOldView= () => {
    // Проверяем, была ли ошибка в распознавании
    project.SendInfoToLog("Проверяем правильность", needShowMessages);
    HtmlElement he = tab.FindElementByAttribute("div", "class", "fbc-error", "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(waitTime2); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    success = true;
};

// проверим правильность ответа рекапчи 2
Action Check= () => {
    project.SendInfoToLog("Проверяем правильность", needShowMessages);
    for (int k = 0; k < tryLoadElement; k++)
    {
        var checkAnswer = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
        if (!checkAnswer.IsVoid)
        {
            if (checkAnswer.OuterHtml.Contains("style=\"\""))
                success = true;
            else
                success = false;
            return;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
        System.Threading.Thread.Sleep(waitTime2);
    }
};

// Кликаем по кнопке я не робот, если она есть
NotRobotClick();
if (success) return "ok";

// Пытаемся распознать рекапчу
for (int i = 0; i < tryRecognize; i++)
{
    int z = i;
    z++;
    project.SendInfoToLog(Convert.ToString(z)+" попытка", needShowMessages);
    if (!isRecaptcha1) OpenAudioTask();
    if (timeout) break;
    GetAudioFile();
    if (timeout) break;
    Recognize();
    if (fileLoadingError)
    {
        fileLoadingError = false;
        continue;
    }
    if (timeout) break;
    InputAnswer();
    if (timeout) break;
    if (!fileDeleted)
    {
        if (File.Exists(file))
        {
            File.Delete(file);
            fileDeleted = true;
        }
    }

    if (isRecaptcha1) return "ok";
    SubmitAnswer();

    if (!needToCheck) return "ok";

    if (timeout) break;
    if (!isNewView) CheckOldView();
    else Check();
    if (success) return "ok";
}

if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
else throw new Exception("Не распознано. Закончились попытки распознать, прежде чем ответ был засчитан");
Измененения в строчках.

4, 5, 7, 9, 11, 173-176, 290, 349, 372, 383-385
 
Last edited:

feniks_06

Пользователь
Joined
Apr 10, 2016
Messages
39
Reaction score
2
Points
8
Mikhail B. - СУПЕР! работает! Большое спасибо.
 
  • Thank you
Reactions: Mikhail B.

Andi88

Client
Joined
Oct 17, 2015
Messages
228
Reaction score
26
Points
28
Тестируйте.

:ci:
Code:
// Основные параметры

// время ожидания
var waitTime = 350;
var waitTime2 = 2600;
// количество попыток распознать
var tryRecognize = 6;
// количество попыток загрузить элемент
var tryLoadElement = 30;
// показывать сообщения о прогрессе распознавания
var needShowMessages = false;
// проверять корректность распознанного ответа
var needToCheck = true;

// Вспомогательные переменные

// вкладка
var tab = instance.ActiveTab;
// поздравляем, вы не робот
var success = false;
// аудио файл
var file = string.Empty;
// файл был удален
var fileDeleted = true;
// ответ на аудио каптчу
var answer = string.Empty;
// новый вид рекаптчи 2
var isNewView = true;
// рекаптча 1
var isRecaptcha1 = false;
// время вышло
var timeout = false;
// ошибка загрузки файла
var fileLoadingError = false;
// cписок урлов скаченных файлов
var usedURLs = new List<string>();

// поиск кнопки открытия формы с аудио заданием
Action TryOpenAudioForm = () => {
    for (int k = 0; k < tryLoadElement; k++)
    {
        var audioButton = tab.FindElementByAttribute("div", "id", "recaptcha-audio-button", "regexp", 0);
        // если нашли
        if (!audioButton.IsVoid)
        {
            // клик по кнопке
            audioButton.Click();
            break;
        }
        System.Threading.Thread.Sleep(waitTime); // подождём немного
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    System.Threading.Thread.Sleep(waitTime); // подождём немного
};

// открытие аудиозадания
Action OpenAudioTask= () => {
    project.SendInfoToLog("Открываем форму с аудио заданием", needShowMessages);
    if (isNewView)
    {
        //проверяем тип задания формы
        var task = tab.FindElementByAttribute("div", "class", "rc-imageselect-desc-wrapper", "regexp", 0);
        if (!task.IsVoid) TryOpenAudioForm(); // найдено графическое задание, значит открываем аудио
    }
    else
    {
        var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
        if (!elem.IsVoid) elem.Click();

        tab.WaitDownloading();
        var errorElem = tab.FindElementByAttribute("div", "class", "fbc-message", "regexp", 0);
        if (!errorElem.IsVoid)
        {
            var attr = errorElem.GetAttribute("innertext");
            if (attr.Contains("Please enable JavaScript and/or update your browser to get an audio challenge"))
            {
                throw new Exception("Не получилось открыть вкладку с аудиозаданием, попробуйте изменить userAgent");
            }
        }
    }
};

// Определение версии рекапчи
Action NotRobotClick= () => {
    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
        {
            // проверяем наличие аудио кнопки рекаптчи 1
            HtmlElement r1 = tab.FindElementById("recaptcha_switch_audio");
            if (!r1.IsVoid)
            {
                r1.Click();
                isRecaptcha1 = true;
                break;
            }

            // проверяем вид рекаптчи2
            var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
            if (!elem.IsVoid)
            {
                isNewView = false;
                break;
            }
            System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
};

// скачиваем mp3-файл
Action GetAudioFile= () => {

    var href = String.Empty;

    // получаем аудио задание
    for (int k = 0; k < tryLoadElement; k++)
    {
        if (isRecaptcha1)
        {
            var audioChallenge = tab.FindElementByAttribute("a", "id", "recaptcha_audio_download", "text", 0);
            // если нашли, получаем ссылку на аудио файл
            if (!audioChallenge.IsVoid)
            {
                href = audioChallenge.GetAttribute("href");
                break;
            }
            else System.Threading.Thread.Sleep(waitTime);
        }
        else
        {
            if (isNewView)
            {
                var audioChallenge = tab.FindElementByAttribute("a", "class", "rc-audiochallenge-download-link", "regexp", 0);
                // если нашли, получаем ссылку на аудио файл
                if (!audioChallenge.IsVoid)
                {
                    href = audioChallenge.GetAttribute("href");
                    break;
                }
                else; // подождём загрузки элемента
                var noaudio = tab.FindElementByAttribute("div", "id", "recaptcha-reload-button", "regexp", 0);
                noaudio.Click();
                System.Threading.Thread.Sleep(waitTime);
                project.SendInfoToLog("Обходим текстовую капчу", needShowMessages);
            }
            else
            {
                var audioChallenge = tab.FindElementByAttribute("audio", "class", "fbc-audio-controls", "regexp", 0);
                // если нашли, получаем ссылку на аудио файл
                if (!audioChallenge.IsVoid)
                {
                    href = audioChallenge.FindChildByAttribute("source", "src", ".mp3", "text", 0).GetAttribute("src");
                    href = "https://www.google.com" + href;
                    break;
                }
                else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
            }
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }

    foreach (var usedUrl in usedURLs)
    {
        if (usedUrl.Contains(href))
            throw new Exception("Отсутствует новый аудио файл");
    }
    usedURLs.Add(href);

    project.SendInfoToLog("Скачиваем аудио файл", needShowMessages);
    try
    {
        var proxy = instance.GetProxy();
        var respType = ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.File;
        var timeoutRequest = 30000;
        var cookies = instance.GetCookie("google.com", true);
        var userAgent = project.Profile.UserAgent;
        var maxRedirectCount = 1;
        var downloadPath = project.Directory + "\\audiofiles";
        file = ZennoPoster.HttpGet(href, proxy, "UTF8", respType, timeoutRequest, cookies, userAgent, false, maxRedirectCount, null, downloadPath);
        fileDeleted = false;
    }
    catch (Exception ex)
    {
        throw new Exception("Не удалось скачать аудио файл");
    }
};

Action Recognize= () => {
    project.SendInfoToLog("Распознаем", needShowMessages);
    try
    {
        if (!File.Exists(file))
        {
            fileLoadingError = true;
            fileDeleted = true;
            return;
        }
        var bytes = File.ReadAllBytes(file);
        if (bytes.Length < 1024)
        {
            fileLoadingError = true;
            return;
        }
        string str = Convert.ToBase64String(bytes);
        var rc = ZennoPoster.CaptchaRecognition("CapMonster2.dll", str, "CapMonsterModule=ZennoLab.AudioReCaptcha&ParallelMode=true");
        answer = rc.Split(new [] {"-|-"}, StringSplitOptions.RemoveEmptyEntries)[0];
                if (answer.Contains("133193320491090004119440")) throw new Exception("Your IP was banned!");
    }
    finally
    {
        if (File.Exists(file))
       {
            File.Delete(file);
            fileDeleted = true;
        }
    }
};

Action InputAnswer= () => {
    if (!String.IsNullOrEmpty(answer) && answer != "sorry")
    {
        project.SendInfoToLog("Вводим ответ", needShowMessages);
        HtmlElement audioAnswerInput = null;
        // ищем поле для ввода ответа
        if (isRecaptcha1)
        {
            audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "recaptcha_response_field", "text", 0);
        }
        else
        {
            if (isNewView) audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "audio-response", "regexp", 0);
            else audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "response", "text", 0);
        }

        // если нашли
        if (!audioAnswerInput.IsVoid)
        {
            // вводим ответ
            audioAnswerInput.SetValue(answer, "None", false);
        }

        // подождём немного
        System.Threading.Thread.Sleep(waitTime);
    }
    else throw new Exception("Ответ не получен");
};

// Подтверждаем
Action SubmitAnswer= () => {
    // ищем кнопку "Подтвердить"
    HtmlElement apply = null;
    if (isNewView) apply = tab.FindElementById("recaptcha-verify-button");
    else apply = tab.FindElementByAttribute("div", "class", "fbc-button-verify", "regexp", 0).FindChildByAttribute("input:submit", "fulltag", "input:submit", "text", 0);

    if (!apply.IsVoid) apply.Click();

    // подождём немного
    System.Threading.Thread.Sleep(waitTime2);
};

// Проверяем правильность для старого вида рекапчи 2
Action CheckOldView= () => {
    // Проверяем, была ли ошибка в распознавании
    project.SendInfoToLog("Проверяем правильность", needShowMessages);
    HtmlElement he = tab.FindElementByAttribute("div", "class", "fbc-error", "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(waitTime2); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    success = true;
};

// проверим правильность ответа рекапчи 2
Action Check= () => {
    project.SendInfoToLog("Проверяем правильность", needShowMessages);
    for (int k = 0; k < tryLoadElement; k++)
    {
        var checkAnswer = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
        if (!checkAnswer.IsVoid)
        {
            if (checkAnswer.OuterHtml.Contains("style=\"\""))
                success = true;
            else
                success = false;
            return;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
        System.Threading.Thread.Sleep(waitTime2);
    }
};

// Кликаем по кнопке я не робот, если она есть
NotRobotClick();
if (success) return "ok";

// Пытаемся распознать рекапчу
for (int i = 0; i < tryRecognize; i++)
{
    int z = i;
    z++;
    project.SendInfoToLog(Convert.ToString(z)+" попытка", needShowMessages);
    if (!isRecaptcha1) OpenAudioTask();
    if (timeout) break;
    GetAudioFile();
    if (timeout) break;
    Recognize();
    if (fileLoadingError)
    {
        fileLoadingError = false;
        continue;
    }
    if (timeout) break;
    InputAnswer();
    if (timeout) break;
    if (!fileDeleted)
    {
        if (File.Exists(file))
        {
            File.Delete(file);
            fileDeleted = true;
        }
    }

    if (isRecaptcha1) return "ok";
    SubmitAnswer();

    if (!needToCheck) return "ok";

    if (timeout) break;
    if (!isNewView) CheckOldView();
    else Check();
    if (success) return "ok";
}

if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
else throw new Exception("Не распознано. Закончились попытки распознать, прежде чем ответ был засчитан");
Измененения в строчках.

4, 5, 7, 9, 11, 173-176, 290, 349, 372, 383-385
2 подряд идущие новые не берёт?
 

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
2 подряд идущие новые не берёт?
Не совсем понял вопроса. Он 6 раз разгадывает (7 строка), если надо больше или меньше, просто меняйте значение.
 

Andi88

Client
Joined
Oct 17, 2015
Messages
228
Reaction score
26
Points
28
если новая капча, он обновляет а потом опять новая, он выдаст ошибку нет аудио?
 

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
если новая капча, он обновляет а потом опять новая, он выдаст ошибку нет аудио?
нет, он будет обновлять пока не появиться аудио (как правило с 1-2 раза появляеться) или гугл сума не сойдет :D Кол-во попыток 9 строка (не стоит ее менят если все работает, я и так убавил ее вдвое)
 
  • Thank you
Reactions: Andi88

Roman*

Client
Joined
Sep 25, 2013
Messages
1,651
Reaction score
655
Points
113
А на пост запросе как перезагрузить?) Придется тоже допиливать.
P.S. Допилил, 1-2 раза перезагрузить и выдает аудио,как надо.
 
Last edited:

dedok3000

Client
Joined
Jan 8, 2012
Messages
87
Reaction score
9
Points
8
Тестируйте.

:ci:
Code:
// Основные параметры

// время ожидания
var waitTime = 350;
var waitTime2 = 2600;
// количество попыток распознать
var tryRecognize = 6;
// количество попыток загрузить элемент
var tryLoadElement = 30;
// показывать сообщения о прогрессе распознавания
var needShowMessages = false;
// проверять корректность распознанного ответа
var needToCheck = true;

// Вспомогательные переменные

// вкладка
var tab = instance.ActiveTab;
// поздравляем, вы не робот
var success = false;
// аудио файл
var file = string.Empty;
// файл был удален
var fileDeleted = true;
// ответ на аудио каптчу
var answer = string.Empty;
// новый вид рекаптчи 2
var isNewView = true;
// рекаптча 1
var isRecaptcha1 = false;
// время вышло
var timeout = false;
// ошибка загрузки файла
var fileLoadingError = false;
// cписок урлов скаченных файлов
var usedURLs = new List<string>();

// поиск кнопки открытия формы с аудио заданием
Action TryOpenAudioForm = () => {
    for (int k = 0; k < tryLoadElement; k++)
    {
        var audioButton = tab.FindElementByAttribute("div", "id", "recaptcha-audio-button", "regexp", 0);
        // если нашли
        if (!audioButton.IsVoid)
        {
            // клик по кнопке
            audioButton.Click();
            break;
        }
        System.Threading.Thread.Sleep(waitTime); // подождём немного
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    System.Threading.Thread.Sleep(waitTime); // подождём немного
};

// открытие аудиозадания
Action OpenAudioTask= () => {
    project.SendInfoToLog("Открываем форму с аудио заданием", needShowMessages);
    if (isNewView)
    {
        //проверяем тип задания формы
        var task = tab.FindElementByAttribute("div", "class", "rc-imageselect-desc-wrapper", "regexp", 0);
        if (!task.IsVoid) TryOpenAudioForm(); // найдено графическое задание, значит открываем аудио
    }
    else
    {
        var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
        if (!elem.IsVoid) elem.Click();

        tab.WaitDownloading();
        var errorElem = tab.FindElementByAttribute("div", "class", "fbc-message", "regexp", 0);
        if (!errorElem.IsVoid)
        {
            var attr = errorElem.GetAttribute("innertext");
            if (attr.Contains("Please enable JavaScript and/or update your browser to get an audio challenge"))
            {
                throw new Exception("Не получилось открыть вкладку с аудиозаданием, попробуйте изменить userAgent");
            }
        }
    }
};

// Определение версии рекапчи
Action NotRobotClick= () => {
    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
        {
            // проверяем наличие аудио кнопки рекаптчи 1
            HtmlElement r1 = tab.FindElementById("recaptcha_switch_audio");
            if (!r1.IsVoid)
            {
                r1.Click();
                isRecaptcha1 = true;
                break;
            }

            // проверяем вид рекаптчи2
            var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
            if (!elem.IsVoid)
            {
                isNewView = false;
                break;
            }
            System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
};

// скачиваем mp3-файл
Action GetAudioFile= () => {

    var href = String.Empty;

    // получаем аудио задание
    for (int k = 0; k < tryLoadElement; k++)
    {
        if (isRecaptcha1)
        {
            var audioChallenge = tab.FindElementByAttribute("a", "id", "recaptcha_audio_download", "text", 0);
            // если нашли, получаем ссылку на аудио файл
            if (!audioChallenge.IsVoid)
            {
                href = audioChallenge.GetAttribute("href");
                break;
            }
            else System.Threading.Thread.Sleep(waitTime);
        }
        else
        {
            if (isNewView)
            {
                var audioChallenge = tab.FindElementByAttribute("a", "class", "rc-audiochallenge-download-link", "regexp", 0);
                // если нашли, получаем ссылку на аудио файл
                if (!audioChallenge.IsVoid)
                {
                    href = audioChallenge.GetAttribute("href");
                    break;
                }
                else; // подождём загрузки элемента
                var noaudio = tab.FindElementByAttribute("div", "id", "recaptcha-reload-button", "regexp", 0);
                noaudio.Click();
                System.Threading.Thread.Sleep(waitTime);
                project.SendInfoToLog("Обходим текстовую капчу", needShowMessages);
            }
            else
            {
                var audioChallenge = tab.FindElementByAttribute("audio", "class", "fbc-audio-controls", "regexp", 0);
                // если нашли, получаем ссылку на аудио файл
                if (!audioChallenge.IsVoid)
                {
                    href = audioChallenge.FindChildByAttribute("source", "src", ".mp3", "text", 0).GetAttribute("src");
                    href = "https://www.google.com" + href;
                    break;
                }
                else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
            }
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }

    foreach (var usedUrl in usedURLs)
    {
        if (usedUrl.Contains(href))
            throw new Exception("Отсутствует новый аудио файл");
    }
    usedURLs.Add(href);

    project.SendInfoToLog("Скачиваем аудио файл", needShowMessages);
    try
    {
        var proxy = instance.GetProxy();
        var respType = ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.File;
        var timeoutRequest = 30000;
        var cookies = instance.GetCookie("google.com", true);
        var userAgent = project.Profile.UserAgent;
        var maxRedirectCount = 1;
        var downloadPath = project.Directory + "\\audiofiles";
        file = ZennoPoster.HttpGet(href, proxy, "UTF8", respType, timeoutRequest, cookies, userAgent, false, maxRedirectCount, null, downloadPath);
        fileDeleted = false;
    }
    catch (Exception ex)
    {
        throw new Exception("Не удалось скачать аудио файл");
    }
};

Action Recognize= () => {
    project.SendInfoToLog("Распознаем", needShowMessages);
    try
    {
        if (!File.Exists(file))
        {
            fileLoadingError = true;
            fileDeleted = true;
            return;
        }
        var bytes = File.ReadAllBytes(file);
        if (bytes.Length < 1024)
        {
            fileLoadingError = true;
            return;
        }
        string str = Convert.ToBase64String(bytes);
        var rc = ZennoPoster.CaptchaRecognition("CapMonster2.dll", str, "CapMonsterModule=ZennoLab.AudioReCaptcha&ParallelMode=true");
        answer = rc.Split(new [] {"-|-"}, StringSplitOptions.RemoveEmptyEntries)[0];
                if (answer.Contains("133193320491090004119440")) throw new Exception("Your IP was banned!");
    }
    finally
    {
        if (File.Exists(file))
       {
            File.Delete(file);
            fileDeleted = true;
        }
    }
};

Action InputAnswer= () => {
    if (!String.IsNullOrEmpty(answer) && answer != "sorry")
    {
        project.SendInfoToLog("Вводим ответ", needShowMessages);
        HtmlElement audioAnswerInput = null;
        // ищем поле для ввода ответа
        if (isRecaptcha1)
        {
            audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "recaptcha_response_field", "text", 0);
        }
        else
        {
            if (isNewView) audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "audio-response", "regexp", 0);
            else audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "response", "text", 0);
        }

        // если нашли
        if (!audioAnswerInput.IsVoid)
        {
            // вводим ответ
            audioAnswerInput.SetValue(answer, "None", false);
        }

        // подождём немного
        System.Threading.Thread.Sleep(waitTime);
    }
    else throw new Exception("Ответ не получен");
};

// Подтверждаем
Action SubmitAnswer= () => {
    // ищем кнопку "Подтвердить"
    HtmlElement apply = null;
    if (isNewView) apply = tab.FindElementById("recaptcha-verify-button");
    else apply = tab.FindElementByAttribute("div", "class", "fbc-button-verify", "regexp", 0).FindChildByAttribute("input:submit", "fulltag", "input:submit", "text", 0);

    if (!apply.IsVoid) apply.Click();

    // подождём немного
    System.Threading.Thread.Sleep(waitTime2);
};

// Проверяем правильность для старого вида рекапчи 2
Action CheckOldView= () => {
    // Проверяем, была ли ошибка в распознавании
    project.SendInfoToLog("Проверяем правильность", needShowMessages);
    HtmlElement he = tab.FindElementByAttribute("div", "class", "fbc-error", "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(waitTime2); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    success = true;
};

// проверим правильность ответа рекапчи 2
Action Check= () => {
    project.SendInfoToLog("Проверяем правильность", needShowMessages);
    for (int k = 0; k < tryLoadElement; k++)
    {
        var checkAnswer = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
        if (!checkAnswer.IsVoid)
        {
            if (checkAnswer.OuterHtml.Contains("style=\"\""))
                success = true;
            else
                success = false;
            return;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
        System.Threading.Thread.Sleep(waitTime2);
    }
};

// Кликаем по кнопке я не робот, если она есть
NotRobotClick();
if (success) return "ok";

// Пытаемся распознать рекапчу
for (int i = 0; i < tryRecognize; i++)
{
    int z = i;
    z++;
    project.SendInfoToLog(Convert.ToString(z)+" попытка", needShowMessages);
    if (!isRecaptcha1) OpenAudioTask();
    if (timeout) break;
    GetAudioFile();
    if (timeout) break;
    Recognize();
    if (fileLoadingError)
    {
        fileLoadingError = false;
        continue;
    }
    if (timeout) break;
    InputAnswer();
    if (timeout) break;
    if (!fileDeleted)
    {
        if (File.Exists(file))
        {
            File.Delete(file);
            fileDeleted = true;
        }
    }

    if (isRecaptcha1) return "ok";
    SubmitAnswer();

    if (!needToCheck) return "ok";

    if (timeout) break;
    if (!isNewView) CheckOldView();
    else Check();
    if (success) return "ok";
}

if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
else throw new Exception("Не распознано. Закончились попытки распознать, прежде чем ответ был засчитан");
Измененения в строчках.

4, 5, 7, 9, 11, 173-176, 290, 349, 372, 383-385
Это мой первый опыт работы с модулем. Не могу понять, зелёная галочка от рекапчи появляется, но экшен всё равно уходит в неуспех.... :(
 

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
Это мой первый опыт работы с модулем. Не могу понять, зелёная галочка от рекапчи появляется, но экшен всё равно уходит в неуспех.... :(
Мало информации, вы делали по этой инструкции?
http://zennolab.com/wiki/rc-audio
 

dedok3000

Client
Joined
Jan 8, 2012
Messages
87
Reaction score
9
Points
8
Мало информации, вы делали по этой инструкции?
http://zennolab.com/wiki/rc-audio
Я использую ваш обновлённый код и больше ничего. Суть в том, что капча распознаётся и галочка (которая в капче) появляется, но вот экшен не завершается успехом, как будто не работают условия проверки в коде.
 

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
Я использую ваш обновлённый код и больше ничего. Суть в том, что капча распознаётся и галочка (которая в капче) появляется, но вот экшен не завершается успехом, как будто не работают условия проверки в коде.
Странно, попробуйте значение в 4 строке заменить с 350 на 2000.
Может вы забыли переменную назначить для снипета?
А вобще прогоните в PM и пришлите сюда, что в логе пишет, после ошибки.
 

dedok3000

Client
Joined
Jan 8, 2012
Messages
87
Reaction score
9
Points
8
Странно, попробуйте значение в 4 строке заменить с 350 на 2000.
Может вы забыли переменную назначить для снипета?
А вобще прогоните в PM и пришлите сюда, что в логе пишет, после ошибки.
Снипет что-то возвращает и ему нужна переменная? o_O вот что значит первый опыт. Теперь получилось, спасибо.
 
  • Thank you
Reactions: Mikhail B.

pavelbond

Client
Joined
May 7, 2015
Messages
91
Reaction score
3
Points
8
постоянно что то сегодня пишет Вы должны выполнить несколько заданий. (( через аудио капчу, кстати заметил что через проджек майкер все хорошо а вот взенке вот так выдает(
Пользуюсь своим ап
 
Last edited:

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
постоянно что то сегодня пишет Вы должны выполнить несколько заданий. (( через аудио капчу, кстати заметил что через проджек майкер все хорошо а вот взенке вот так выдает(
Пользуюсь своим ап
Разрешение окна инстанса попробуй поменять.
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,379
Reaction score
2,039
Points
113
да там вопрос и ответ на новую каптчу не в зашифрованом виде дают, ломайте пока есть возможность ))
 
  • Thank you
Reactions: dedok3000

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
да там вопрос и ответ на новую каптчу не в зашифрованом виде дают, ломайте пока есть возможность ))
снифать надо или че? подскажи хоть куда копать?
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,379
Reaction score
2,039
Points
113

Roman*

Client
Joined
Sep 25, 2013
Messages
1,651
Reaction score
655
Points
113
снифать надо или че? подскажи хоть куда копать?
Незашифрованные это походу только левые вопросники, что вместо файла звука, они обходятся перезагрузкой.
 

pavelbond

Client
Joined
May 7, 2015
Messages
91
Reaction score
3
Points
8
Ребят был ли бан по ап? если да что делать?)) личный ап без прокси работал(( конечно я так думаю что можно поменять у провайдера(
 

pavelbond

Client
Joined
May 7, 2015
Messages
91
Reaction score
3
Points
8
использовал новыый снипет, делал на разгадывание капчи) кран так сказать эксплаутировал) тестировал) до тестировался. Спс кстати за снипет очень классный)) в хорошем смысле.
Данный вопрос решился, ап динамический) но используйте прокси баны пошли
 
Last edited:
  • Thank you
Reactions: Mikhail B.

Egorko

Client
Joined
Nov 19, 2015
Messages
40
Reaction score
11
Points
8
Mikhail B. Благодарю, то что надо! Всё работает
 

spbalexpiter

Client
Joined
Nov 24, 2013
Messages
354
Reaction score
56
Points
28
отличный снипет, работает на ура. спасибо. надуюсь гугл не забанит мой ip :-)
 

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113

Attachments

Last edited:
  • Thank you
Reactions: Roman*

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
Собрал небольшую статистику по попыткам, прокси дешевые использовал.

1 попытка - 100
2 попытки - 560
3 попытки - 222
4 попытки - 120
5 попыток - 85
6 попыток - 37
7 попыток - 24
8 попыток - 11
9 попыток - 10
10 попыток- 5
11 попыток- 3
12 попыток- 3
13 попыток- 4
14 попыток- 2
Не удача - 112

Исходя из данных выше, думаю самый логичный выбор это 7 попыток.
 
  • Thank you
Reactions: dedok3000

dedok3000

Client
Joined
Jan 8, 2012
Messages
87
Reaction score
9
Points
8
Собрал небольшую статистику по попыткам, прокси дешевые использовал.

1 попытка - 100
2 попытки - 560
3 попытки - 222
4 попытки - 120
5 попыток - 85
6 попыток - 37
7 попыток - 24
8 попыток - 11
9 попыток - 10
10 попыток- 5
11 попыток- 3
12 попыток- 3
13 попыток- 4
14 попыток- 2
Не удача - 112

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

Mikhail B.

Moderator
Joined
Dec 23, 2014
Messages
14,333
Reaction score
5,431
Points
113
Что происходит в случае неудачи? Требуется разгадать картинки или этот новый вид капчи?
У меня регистрации, по этому я просто завершаю выполнение шаблона.
Как правило неудача, это когда IP достиг лимита разгадываний, либо лимита достиг сниппет.

Если бы мы сделали 7 попыток, то неудач было бы 160 а не 120, а если 5, то 221.
Тут вопрос времени, у меня от начала шаблона до начала разгадывания уходит время за которое кап разгадывает 2 попытки, по этому мне выгоднее подождать 5-7 попыток, чем ждать в пустую. Но если у вас капча в середине шаблона, то конечно, тут надо выставлять по максимуму. С другой стороны, любой нормальный человек не будет 14 раз разгадывать, это сумасшествие.
 
Last edited:

dedok3000

Client
Joined
Jan 8, 2012
Messages
87
Reaction score
9
Points
8
У меня регистрации, по этому я просто завершаю выполнение шаблона.
Как правило неудача, это когда IP достиг лимита разгадываний.
Ну да, я имею ввиду в чём причина неудачи? Появляется этот новый вид капчи, который не переключить на аудио даже после 14 попыток?
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)