AudioReCaptcha (Закончились попытки распознать, Отсутствует новый аудио файл)

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Гугл капчу принимает, а снипет считает, что нет, это происходит после второй попытки.
Если 2 попытки в настройках пишет
Код:
Закончились попытки распознать, прежде чем ответ был засчитан
Если поставить в настройках 3 попытки пишет
Код:
Отсутствует новый аудио файл
в 50% случаев пишет не найден аудио файл. Можно ли игнорировать эту ошибку?

Вот официальный снипет
Код:
// Основные параметры
// время ожидания
var waitTime = 1000;
// количество попыток распознать
var tryRecognize = 2;
// количество попыток загрузить элемент
var tryLoadElement = 60;
// показывать сообщения о прогрессе распознавания
var needShowMessages = false;
// Вспомогательные переменные
// вкладка
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 System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
            }
            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(waitTime);
};
// Проверяем правильность для старого вида рекапчи 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(waitTime); // подождём немного
            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(waitTime);
    }
};
// Кликаем по кнопке я не робот, если она есть
NotRobotClick();
if (success) return "ok";
// Пытаемся распознать рекапчу
for (int i = 0; i < tryRecognize; i++)
{
    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 (timeout) break;
    if (!isNewView) CheckOldView();
    else Check();
    if (success) return "ok";
}
if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
else throw new Exception("Не распознано. Закончились попытки распознать, прежде чем ответ был засчитан");
 
Последнее редактирование:

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 223
Баллы
113

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Попробуйте увеличить количество попыток:
Код:
var tryRecognize = 9;
Все равно пишет отсутствует новый аудиофайл, даже с 1 попытки, суть в том, что файла нет, капча разгадана!!
 
Последнее редактирование:

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 223
Баллы
113

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Я не понимаю
Код:
        var audioButton = tab.FindElementByAttribute("div", "id", "recaptcha-audio-button", "regexp", 0);
        // если нашли
        if (!audioButton.IsVoid)
Я конечно не гуру Zenno и C# но я не нашел ID элемента кнопки из снипета, зато вручную нашел это
2016-03-22_104002.jpg

Хотя нет, походу я путаю!
 
Последнее редактирование:

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Dr.web удалил не помогает.
Костыли не помогают тоже.
Руки опускаются =(
 

Вложения

Последнее редактирование:

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 233
Благодарностей
5 846
Баллы
113
А на каком сайте капча висит? У меня был такой затык на каком-то непонятном сайте, куда капча криво встроена была. На официальной странице с демо-капчей все отрабатывало прекрасно.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Jimdo.com конструктор сайтов
Из 100, 65 выполнено. Думал будет стабильнее, ладно хоть теперь на капчу не приходиться тратиться.
 
Последнее редактирование:

ZSharp

Client
Регистрация
29.09.2013
Сообщения
387
Благодарностей
121
Баллы
43
Такая же проблема
Часто бывает на каптче галка отмечена, а шаблон выходит по ошибке.
А бывает не отправляет вообще каптчу на капмонстр.

Администрация, посмотрите может там подправить что-то нужно?
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Мне дали только один ответ, криво прикручена рекапча на сайте. Даже отправил шаблон Ростониксу, но тоже тишина. Так и делаю на костылях. =)
 

ZSharp

Client
Регистрация
29.09.2013
Сообщения
387
Благодарностей
121
Баллы
43
Ну на том сайте, на котором у меня виснет, я очень сомневаюсь что криво прикручено )
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113

Andi88

Client
Регистрация
17.10.2015
Сообщения
228
Благодарностей
26
Баллы
28
После этого сниппета делай сам проверку, и обе ветки с него кинь.
 

Protey

Client
Регистрация
09.01.2016
Сообщения
208
Благодарностей
29
Баллы
28
народ, поделитесь кто нашел решение этих ошибок, а то время от времени при разгадывании, к примеру на сайте _patrickhlauke.github.io/recaptcha/ выскакивает CSharp Own Code отсутствует новый аудио файл, а он есть, через PM возможно получить ссылку на него _https://www.g__le.com/rec__tcha/api2/payload/audio.mp3?c=дальше дофига букв и цифр, но один фиг действие завершается ошибкой....как так то, у самого после этого много букв из которых можно составить не хорошие слова... (facepalm)
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
народ, поделитесь кто нашел решение этих ошибок, а то время от времени при разгадывании, к примеру на сайте _patrickhlauke.github.io/recaptcha/ выскакивает CSharp Own Code отсутствует новый аудио файл, а он есть, через PM возможно получить ссылку на него _https://www.g__le.com/rec__tcha/api2/payload/audio.mp3?c=дальше дофига букв и цифр, но один фиг действие завершается ошибкой....как так то, у самого после этого много букв из которых можно составить не хорошие слова... (facepalm)
Поставьте 5 попыток, в настройке кода.
 
  • Спасибо
Реакции: Protey

Protey

Client
Регистрация
09.01.2016
Сообщения
208
Благодарностей
29
Баллы
28

Protey

Client
Регистрация
09.01.2016
Сообщения
208
Благодарностей
29
Баллы
28
Поставьте 5 попыток, в настройке кода.
Не, не выходит, один фиг, CSharp Own Code отсутствует новый аудио файл, пробовал время ожидания понижать и увеличивать, так же и с попытками...

Код:
// время ожидания
var waitTime = 10000;
// количество попыток распознать
var tryRecognize = 5;
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Не, не выходит, один фиг, CSharp Own Code отсутствует новый аудио файл, пробовал время ожидания понижать и увеличивать, так же и с попытками...

Код:
// время ожидания
var waitTime = 10000;
// количество попыток распознать
var tryRecognize = 5;
У меня тоже все очень плачевно, Я ставлю количество успехов сколько нужно, неудач подряд 30. И кол выполнений в 2-3 раза больше. И в логе жму синий кружок, и пусть оно там делаеться как хочет.
Чем лучше прокси, тем меньше попыток и лучше капча проходит. если с 1-2 попыток, то прокси условно нормальные, если 2-5 попыток, то условно заюзанные.
 

Protey

Client
Регистрация
09.01.2016
Сообщения
208
Благодарностей
29
Баллы
28
У меня тоже все очень плачевно
полностью поддерживаю, причем в ПМ же видно, и есть возможность получить ссылку на audio.mp3, если бы знать как самому отправить этот audio.mp3 в КМ, а достать его уже я думаю не составит труда, может как-то в снипите это можно сделать, а как... тут я уже в C# не понимать)
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Ошибка "не найден новый аудио фал" не говорит что файл нельзя скачать, а говорит о том что такой файл по этой же ссылке уже отправлялся и рекаптча ответ не приняла.
 

Protey

Client
Регистрация
09.01.2016
Сообщения
208
Благодарностей
29
Баллы
28
Ошибка "не найден новый аудио фал" не говорит что файл нельзя скачать, а говорит о том что такой файл по этой же ссылке уже отправлялся и рекаптча ответ не приняла.
т.е. если логически подумать, то обновлением страницы это можно исправить?)
а что на счет Your IP was banned!, это можно как-то обойти?
Your IP was banned! - с этим не проверял через КМ можно скачать файл или нет
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Вообще и то и то случается когда рекаптче не нравитесь вы и ваш IP)))
Я не уверен что обновление страницы сильно улучшим ситуацию. Нужно с другой проксей пробовать
 

Mandyson

Client
Регистрация
03.06.2012
Сообщения
410
Благодарностей
84
Баллы
28
Други, очень нужно сломать эту капчу. Капмонстр как я понял нормально гадает по аудио? Сколько секунд тратится?
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Други, очень нужно сломать эту капчу. Капмонстр как я понял нормально гадает по аудио? Сколько секунд тратится?
10-15 на одно разгадывание по факту, в программе 0-2 сек.
Гадает нормально с нормальных прокси, с обычных не дорогих по 2 раза подряд, с заюзаных в хламину, по 5 раз.
 
  • Спасибо
Реакции: Mandyson и rostonix

Sovgav

Client
Регистрация
22.10.2013
Сообщения
36
Благодарностей
4
Баллы
8
А такой вопрос...
В случае, если капчамонстр выдает 133193320491090004119440, то как мне получить это значение в переменной? нужно это для того, чтобы отсеять те прокси, которые выдают такую ошибку. в переменных данные капчамоснта на рекапчу нигде не отображаются, поэтому не знаю что делать. кто нибдуь знает как это решить?
 

marya

Client
Регистрация
23.06.2016
Сообщения
248
Благодарностей
24
Баллы
18
А такой вопрос...
В случае, если капчамонстр выдает 133193320491090004119440, то как мне получить это значение в переменной? нужно это для того, чтобы отсеять те прокси, которые выдают такую ошибку. в переменных данные капчамоснта на рекапчу нигде не отображаются, поэтому не знаю что делать. кто нибдуь знает как это решить?
Можно,сначало определить , есть ли бан, если нет,то отправить на капмонстр.
 
  • Спасибо
Реакции: Sovgav

marya

Client
Регистрация
23.06.2016
Сообщения
248
Благодарностей
24
Баллы
18
  • Спасибо
Реакции: Sovgav

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